Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Initial Commit

  • Loading branch information...
commit 1933df6f337f81e667a59dd1ffd80ff4b495a837 0 parents
@robrighter authored
1  .gitignore
@@ -0,0 +1 @@
+node_modules
10 Makefile
@@ -0,0 +1,10 @@
+TESTS = test/*.js
+
+test:
+ @NODE_ENV=test ./node_modules/.bin/mocha \
+ --require should \
+ --reporter list \
+ --slow 20 \
+ --growl \
+ $(TESTS)
+.PHONY: test
1  config.json
@@ -0,0 +1 @@
+{ "version": "v0.6.6" }
19 package.json
@@ -0,0 +1,19 @@
+{
+ "name": "YOUR-PROJECT-NAME-HERE",
+ "description": "YOUR PROJECT DESCRIPTION HERE",
+ "author": "YOUR NAME <your@emailaddress.com>",
+ "version": "0.0.1",
+ "dependencies": {
+ "connect": "1.8.5",
+ "express": "2.5.2",
+ "jade": "0.20.0",
+ "mongoose": "2.4.8",
+ "socket.io": "0.8.7"
+ },
+ "devDependencies": {
+ "vows": "0.5.x",
+ "mocha": "*",
+ "should": "*"
+ },
+ "engine": "node >= 0.6.6"
+}
89 server.js
@@ -0,0 +1,89 @@
+//setup Dependencies
+var connect = require('connect')
+ , express = require('express')
+ , io = require('socket.io')
+ , port = (process.env.PORT || 8081);
+
+//Setup Express
+var server = express.createServer();
+server.configure(function(){
+ server.set('views', __dirname + '/views');
+ server.set('view options', { layout: false });
+ server.use(connect.bodyParser());
+ server.use(express.cookieParser());
+ server.use(express.session({ secret: "shhhhhhhhh!"}));
+ server.use(connect.static(__dirname + '/static'));
+ server.use(server.router);
+});
+
+//setup the errors
+server.error(function(err, req, res, next){
+ if (err instanceof NotFound) {
+ res.render('404.jade', { locals: {
+ title : '404 - Not Found'
+ ,description: ''
+ ,author: ''
+ ,analyticssiteid: 'XXXXXXX'
+ },status: 404 });
+ } else {
+ res.render('500.jade', { locals: {
+ title : 'The Server Encountered an Error'
+ ,description: ''
+ ,author: ''
+ ,analyticssiteid: 'XXXXXXX'
+ ,error: err
+ },status: 500 });
+ }
+});
+server.listen( port);
+
+//Setup Socket.IO
+var io = io.listen(server);
+io.sockets.on('connection', function(socket){
+ console.log('Client Connected');
+ socket.on('message', function(data){
+ socket.broadcast.emit('server_message',data);
+ socket.emit('server_message',data);
+ });
+ socket.on('disconnect', function(){
+ console.log('Client Disconnected.');
+ });
+});
+
+
+///////////////////////////////////////////
+// Routes //
+///////////////////////////////////////////
+
+/////// ADD ALL YOUR ROUTES HERE /////////
+
+server.get('/', function(req,res){
+ res.render('index.jade', {
+ locals : {
+ title : 'Your Page Title'
+ ,description: 'Your Page Description'
+ ,author: 'Your Name'
+ ,analyticssiteid: 'XXXXXXX'
+ }
+ });
+});
+
+
+//A Route for Creating a 500 Error (Useful to keep around)
+server.get('/500', function(req, res){
+ throw new Error('This is a 500 Error');
+});
+
+//The 404 Route (ALWAYS Keep this as the last route)
+server.get('/*', function(req, res){
+ throw new NotFound;
+});
+
+function NotFound(msg){
+ this.name = 'NotFound';
+ Error.call(this, msg);
+ Error.captureStackTrace(this, arguments.callee);
+}
+
+
+console.log('Listening on http://0.0.0.0:' + port );
622 static/css/style.css
@@ -0,0 +1,622 @@
+/*
+ * HTML5 Boilerplate
+ *
+ * What follows is the result of much research on cross-browser styling.
+ * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
+ * Kroc Camen, and the H5BP dev community and team.
+ *
+ * Detailed information about this CSS: h5bp.com/css
+ */
+
+
+/* ==========================================================================
+ HTML5 display definitions
+ ========================================================================== */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section,
+summary {
+ display: block;
+}
+
+audio,
+canvas,
+video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+audio:not([controls]) {
+ display: none;
+}
+
+[hidden] {
+ display: none;
+}
+
+
+/* ==========================================================================
+ Base
+ ========================================================================== */
+
+/*
+ * 1. Correct text resizing oddly in IE6/7 when body font-size is set using em units
+ * 2. Prevent iOS text size adjust on device orientation change, without disabling user zoom: h5bp.com/g
+ */
+
+html {
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+html,
+button,
+input,
+select,
+textarea {
+ font-family: sans-serif;
+ color: #222;
+}
+
+body {
+ margin: 0;
+ font-size: 1em;
+ line-height: 1.4;
+}
+
+/*
+ * Remove text-shadow in selection highlight: h5bp.com/i
+ * These selection declarations have to be separate.
+ * Customize the background color to match your design.
+ */
+
+::-moz-selection {
+ background: #b3d4fc;
+ text-shadow: none;
+}
+
+::selection {
+ background: #b3d4fc;
+ text-shadow: none;
+}
+
+
+/* ==========================================================================
+ Links
+ ========================================================================== */
+
+a {
+ color: #00e;
+}
+
+a:visited {
+ color: #551a8b;
+}
+
+a:hover {
+ color: #06e;
+}
+
+a:focus {
+ outline: thin dotted;
+}
+
+/*
+ * Improve readability when focused and hovered in all browsers: h5bp.com/h
+ */
+
+a:hover,
+a:active {
+ outline: 0;
+}
+
+
+/* ==========================================================================
+ Typography
+ ========================================================================== */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+b,
+strong {
+ font-weight: bold;
+}
+
+blockquote {
+ margin: 1em 40px;
+}
+
+dfn {
+ font-style: italic;
+}
+
+hr {
+ display: block;
+ height: 1px;
+ border: 0;
+ border-top: 1px solid #ccc;
+ margin: 1em 0;
+ padding: 0;
+}
+
+ins {
+ background: #ff9;
+ color: #000;
+ text-decoration: none;
+}
+
+mark {
+ background: #ff0;
+ color: #000;
+ font-style: italic;
+ font-weight: bold;
+}
+
+/*
+ * Redeclare monospace font family: h5bp.com/j
+ */
+
+pre,
+code,
+kbd,
+samp {
+ font-family: monospace, serif;
+ _font-family: 'courier new', monospace;
+ font-size: 1em;
+}
+
+/*
+ * Improve readability of pre-formatted text
+ */
+
+pre {
+ white-space: pre;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+
+q {
+ quotes: none;
+}
+
+q:before,
+q:after {
+ content: "";
+ content: none;
+}
+
+small {
+ font-size: 85%;
+}
+
+/*
+ * Position subscript and superscript content without affecting line-height: h5bp.com/k
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+
+/* ==========================================================================
+ Lists
+ ========================================================================== */
+
+ul,
+ol {
+ margin: 1em 0;
+ padding: 0 0 0 40px;
+}
+
+dd {
+ margin: 0 0 0 40px;
+}
+
+nav ul,
+nav ol {
+ list-style: none;
+ list-style-image: none;
+ margin: 0;
+ padding: 0;
+}
+
+
+/* ==========================================================================
+ Embedded content
+ ========================================================================== */
+
+/*
+ * 1. Improve image quality when scaled in IE7: h5bp.com/d
+ * 2. Remove the gap between images and borders on image containers: h5bp.com/i/440
+ */
+
+img {
+ border: 0;
+ vertical-align: middle;
+ -ms-interpolation-mode: bicubic;
+}
+
+/*
+ * Correct overflow not hidden in IE9
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+
+/* ==========================================================================
+ Figures
+ ========================================================================== */
+
+figure {
+ margin: 0;
+}
+
+
+/* ==========================================================================
+ Forms
+ ========================================================================== */
+
+form {
+ margin: 0;
+}
+
+fieldset {
+ border: 0;
+ margin: 0;
+ padding: 0;
+}
+
+/*
+ * Indicate that 'label' will shift focus to the associated form element
+ */
+
+label {
+ cursor: pointer;
+}
+
+/*
+ * 1. Correct color not inheriting in IE6/7/8/9
+ * 2. Correct alignment displayed oddly in IE6/7
+ */
+
+legend {
+ border: 0;
+ padding: 0;
+ white-space: normal;
+ *margin-left: -7px;
+}
+
+/*
+ * 1. Correct font-size not inheriting in all browsers
+ * 2. Remove margins in FF3/4 S5 Chrome
+ * 3. Define consistent vertical alignment display in all browsers
+ */
+
+button,
+input,
+select,
+textarea {
+ font-size: 100%;
+ margin: 0;
+ vertical-align: baseline;
+ *vertical-align: middle;
+}
+
+/*
+ * 1. Define line-height as normal to match FF3/4 (set using !important in the UA stylesheet)
+ */
+
+button,
+input {
+ line-height: normal;
+}
+
+/*
+ * 1. Display hand cursor for clickable form elements
+ * 2. Allow styling of clickable form elements in iOS
+ * 3. Correct inner spacing displayed oddly in IE7 (doesn't effect IE6)
+ */
+
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ cursor: pointer;
+ -webkit-appearance: button;
+ *overflow: visible;
+}
+
+/*
+ * Re-set default cursor for disabled elements
+ */
+
+button[disabled],
+input[disabled] {
+ cursor: default;
+}
+
+/*
+ * Consistent box sizing and appearance
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+ *width: 13px;
+ *height: 13px;
+}
+
+input[type="search"] {
+ -webkit-appearance: textfield;
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+}
+
+/*
+ * Remove inner padding and border in FF3/4: h5bp.com/l
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/*
+ * 1. Remove default vertical scrollbar in IE6/7/8/9
+ * 2. Allow only vertical resizing
+ */
+
+textarea {
+ overflow: auto;
+ vertical-align: top;
+ resize: vertical;
+}
+
+
+/* ==========================================================================
+ Tables
+ ========================================================================== */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td {
+ vertical-align: top;
+}
+
+
+/* ==========================================================================
+ Chrome Frame Prompt
+ ========================================================================== */
+
+.chromeframe {
+ margin: 0.2em 0;
+ background: #ccc;
+ color: #000;
+ padding: 0.2em 0;
+}
+
+
+/* ==========================================================================
+ Primary styles.
+ Author:
+ ========================================================================== */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* ==========================================================================
+ EXAMPLE Media Query for Responsive Design.
+ This example overrides the primary ('mobile first') styles
+ Modify as content requires.
+ ========================================================================== */
+
+@media only screen and (min-width: 35em) {
+ /* Style adjustments for viewports that meet the condition */
+}
+
+
+
+/* ==========================================================================
+ Helper classes.
+ Please define your styles before this section.
+ ========================================================================== */
+
+/*
+ * Image replacement
+ */
+
+.ir {
+ border: 0;
+ font: 0/0 a;
+ text-shadow: none;
+ color: transparent;
+ background-color: transparent;
+}
+
+/*
+ * Hide from both screenreaders and browsers: h5bp.com/u
+ */
+
+.hidden {
+ display: none !important;
+ visibility: hidden;
+}
+
+/*
+ * Hide only visually, but have it available for screenreaders: h5bp.com/v
+ */
+
+.visuallyhidden {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+
+/*
+ * Extends the .visuallyhidden class to allow the element to be focusable
+ * when navigated to via the keyboard: h5bp.com/p
+ */
+
+.visuallyhidden.focusable:active,
+.visuallyhidden.focusable:focus {
+ clip: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ position: static;
+ width: auto;
+}
+
+/*
+ * Hide visually and from screenreaders, but maintain layout
+ */
+
+.invisible {
+ visibility: hidden;
+}
+
+/*
+ * Contain floats: h5bp.com/q
+ */
+
+.clearfix:before,
+.clearfix:after {
+ content: "";
+ display: table;
+}
+
+.clearfix:after {
+ clear: both;
+}
+
+.clearfix {
+ *zoom: 1;
+}
+
+
+
+/* ==========================================================================
+ Print styles.
+ Inlined to avoid required HTTP connection: h5bp.com/r
+ ========================================================================== */
+
+@media print {
+ * {
+ background: transparent !important;
+ color: #000 !important; /* Black prints faster: h5bp.com/s */
+ box-shadow:none !important;
+ text-shadow: none !important;
+ }
+
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ /*
+ * Don't show links for images, or javascript/internal links
+ */
+
+ .ir a:after,
+ a[href^="javascript:"]:after,
+ a[href^="#"]:after {
+ content: "";
+ }
+
+ pre,
+ blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid;
+ }
+
+ thead {
+ display: table-header-group; /* h5bp.com/t */
+ }
+
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ @page {
+ margin: 0.5cm;
+ }
+
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+}
15 static/js/script.js
@@ -0,0 +1,15 @@
+/* Author: YOUR NAME HERE
+*/
+
+$(document).ready(function() {
+
+ var socket = io.connect();
+
+ $('#sender').bind('click', function() {
+ socket.emit('message', 'Message Sent on ' + new Date());
+ });
+
+ socket.on('server_message', function(data){
+ $('#receiver').append('<li>' + data + '</li>');
+ });
+});
7 test/stub.js
@@ -0,0 +1,7 @@
+describe('stub', function(){
+
+ describe('#test', function(){
+ it('should have some units tests')
+ })
+
+})
2  views/404.jade
@@ -0,0 +1,2 @@
+h1='Not Found'
+div='Sorry, the page you are looking for does not exist.'
7 views/500.jade
@@ -0,0 +1,7 @@
+!!! 5
+html
+ head
+ title='500 Error'
+ body
+ h1='The Server Encountered and Error'
+ div=error
6 views/index.jade
@@ -0,0 +1,6 @@
+extends layout
+
+block content
+ div
+ a(id='sender')='Send a Message'
+ ul(id='receiver')
41 views/layout.jade
@@ -0,0 +1,41 @@
+!!! 5
+//if lt IE 7
+ html.no-js.ie6.oldie(lang='en')
+//if IE 7
+ html.no-js.ie7.oldie(lang='en')
+//if IE 8
+ html.no-js.ie8.oldie(lang='en')
+//[if gt IE 8]><!
+html.no-js(lang='en')
+ //<![end if]
+ head
+ meta(charset='utf-8')
+ meta(http-equiv='X-UA-Compatible', content='IE=edge,chrome=1')
+ title=title
+ meta(name="description", content=description)
+ meta(name="author", content=author)
+ meta(name="viewport", content='width=device-width, initial-scale=1')
+ link(rel='stylesheet', href='/css/style.css')
+ //-script(src='js/libs/modernizr-2.0.6.min.js')
+ body
+ block header
+
+ block content
+
+ block footer
+ footer
+ script(src='//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js')
+ script
+ window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\\/script>')
+ //-script(defer, src='js/plugins.js')
+ script(defer, src='/js/script.js')
+ script(defer, src='/socket.io/socket.io.js')
+ script
+ var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview'],['_trackPageLoadTime']];
+ (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;
+ g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
+ s.parentNode.insertBefore(g,s)}(document,'script'));
+ //if lt IE 7
+ script(defer, src='//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js')
+ script(defer)
+ window.attachEvent('onload',function(){CFInstall.check({mode:'overlay'})})
Please sign in to comment.
Something went wrong with that request. Please try again.