Created initial project structure

This commit is contained in:
Alicia Sykes
2015-07-31 21:57:13 +01:00
parent 4bef537323
commit 4f19faff04
26 changed files with 353 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
node_modules
bower_components
.idea
*.idea
.log
*.log

63
app.js Normal file
View File

@@ -0,0 +1,63 @@
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var map = require('./routes/map');
var timeline = require('./routes/timeline');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/bower_components', express.static(__dirname + '/bower_components'));
app.use('/', routes);
app.use('/map', map);
app.use('/timeline', timeline);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;

90
bin/www Normal file
View File

@@ -0,0 +1,90 @@
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('twitter-sentiment-visualisation:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}

View File

@@ -0,0 +1 @@
[{"featureType":"landscape","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"transit","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"poi","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"water","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"road","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"stylers":[{"hue":"#00aaff"},{"saturation":-100},{"gamma":2.15},{"lightness":12}]},{"featureType":"road","elementType":"labels.text.fill","stylers":[{"visibility":"on"},{"lightness":24}]},{"featureType":"road","elementType":"geometry","stylers":[{"lightness":57}]}]

BIN
public/images/loading.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,6 @@
(function() {
$(window).load(function() {
$('#loading-graphic').fadeOut('slow');
});
}).call(this);

1
public/stylesheets/all.min.css vendored Normal file
View File

@@ -0,0 +1 @@
a,h1,h2,h3,h4,h5,li,p,span{font-family:Roboto,"Helvetica Neue",Helvetica,Arial,sans-serif}#loading-graphic{position:fixed;left:0;top:0;width:100%;height:100%;z-index:998;background:url(/images/loading.gif) center no-repeat #fff}.card{box-shadow:0 1px 3px rgba(0,0,0,.15);background:#fff;display:inline-block;border-radius:2px}.card:hover{box-shadow:0 1px 4px 1px rgba(0,0,0,.2)}.card.home-panels{width:24em;height:15em;margin:.5em;padding:.5em 1em}body{font:14px "Lucida Grande",Helvetica,Arial,sans-serif;margin:0;background:#efefef}h1,h2,h3,h4,h5{font-weight:400}h3{font-size:1.3em}google-map{height:600px}.content.dashboard{margin:1.5em 3em}.content.map{margin:0}

9
routes/index.js Normal file
View File

@@ -0,0 +1,9 @@
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express', pageNum: 0 });
});
module.exports = router;

9
routes/map.js Normal file
View File

@@ -0,0 +1,9 @@
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('page_map', { title: 'Map', pageNum: 1 });
});
module.exports = router;

9
routes/timeline.js Normal file
View File

@@ -0,0 +1,9 @@
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('page_timeline', { title: 'Time Line', pageNum: 2 });
});
module.exports = router;

View File

@@ -0,0 +1,3 @@
$(window).load ->
$('#loading-graphic').fadeOut 'slow'
return

View File

@@ -0,0 +1,22 @@
@import "constants";
.card{
box-shadow: @shadow_panel_default;
background: @col_white;
display: inline-block;
border-radius: 2px;
&:hover{
box-shadow: @shadow_panel_hover;
}
&.home-panels{
width: 24em;
height: 15em;
margin: 0.5em;
padding: 0.5em 1em;
}
}

View File

@@ -0,0 +1,25 @@
/******************\
*---- COLORS ----*
\******************/
@col_primary: #47D5E8;
@col_white: #fff;
@col_palegrey: #EFEFEF;
/******************\
*---- FONTS -----*
\******************/
@font_default: "Roboto","Helvetica Neue",Helvetica,Arial,sans-serif;
/******************\
*---- SHADOWS ---*
\******************/
@shadow_panel_default: 0 1px 3px rgba(0,0,0,0.15);
@shadow_panel_hover: 0 1px 4px 1px rgba(0,0,0,0.2);

View File

@@ -0,0 +1,30 @@
@import "constants";
/******************\
*-- PAGE LAYOUT -*
\******************/
body {
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
margin: 0;
background: @col_palegrey;
}
/******************\
*----- TEXT -----*
\******************/
p, a, span, li{
font-family: @font_default;
}
h1, h2, h3, h4, h5{
font-family: @font_default;
font-weight: normal;
}
h3{
font-size: 1.3em;
}

View File

@@ -0,0 +1,9 @@
#loading-graphic{
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 998;
background: url(/images/loading.gif) center no-repeat #fff;
}

5
source/styles/map.less Normal file
View File

@@ -0,0 +1,5 @@
@import 'constants';
google-map {
height: 600px;
}

11
source/styles/pages.less Normal file
View File

@@ -0,0 +1,11 @@
.content.dashboard{
margin: 1.5em 3em;
}
.content.map{
margin: 0;
}

6
views/error.jade Normal file
View File

@@ -0,0 +1,6 @@
extends layout
block content
h1= message
h2= error.status
pre #{error.stack}

View File

@@ -0,0 +1,4 @@
script(type='text/javascript', src='/bower_components/jquery/dist/jquery.min.js')
script(type='text/javascript', src='/bower_components/materialize/dist/js/materialize.min.js')
script(type='text/javascript', src='/javascripts/loading.js')

2
views/head.jade Normal file
View File

@@ -0,0 +1,2 @@
link(rel='stylesheet', href='/bower_components/materialize/dist/css/materialize.min.css')
link(rel='stylesheet', href='/stylesheets/all.min.css')

7
views/index.jade Normal file
View File

@@ -0,0 +1,7 @@
extends layout
block content
div.content.dashboard
each val, index in {1:'One',2:'Two',3:'Three'}
div.card.home-panels
h3='Title of Page ' + val

10
views/layout.jade Normal file
View File

@@ -0,0 +1,10 @@
doctype html
html
head
title= title
include ./head
body.vertical.layout
div#loading-graphic
include ./navbar
block content
include ./footer_scripts

1
views/map_style.jade Normal file
View File

@@ -0,0 +1 @@
- var mapstyle = '[{"featureType":"landscape","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"transit","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"poi","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"water","elementType":"labels","stylers":[{"visibility":"off"}]},{"featureType":"road","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"stylers":[{"hue":"#00aaff"},{"saturation":-100},{"gamma":2.15},{"lightness":12}]},{"featureType":"road","elementType":"labels.text.fill","stylers":[{"visibility":"on"},{"lightness":24}]},{"featureType":"road","elementType":"geometry","stylers":[{"lightness":57}]}]'

10
views/navbar.jade Normal file
View File

@@ -0,0 +1,10 @@
nav
.nav-wrapper
a.brand-logo(href='#') Twitter Sentiment Visualisation
ul#nav-mobile.right.hide-on-med-and-down
li.active
a(href='/') Dashboard
li
a(href='/map') Map
li
a(href='/timeline') Timeline

8
views/page_map.jade Normal file
View File

@@ -0,0 +1,8 @@
extends layout
block content
div.content.map
script(src="/bower_components/webcomponentsjs/webcomponents.min.js")
link(rel="import", href="/bower_components/google-map/google-map.html")
include map_style
google-map(latitude="37.77493", longitude="-122.41942", fit-to-markers, styles="#{mapstyle}")
script(src='/javascripts/map.js')

6
views/page_timeline.jade Normal file
View File

@@ -0,0 +1,6 @@
extends layout
block content
div.content.timeline
h4 timeline