diff --git a/.idea/libraries/silvrgit_node_modules.xml b/.idea/libraries/silvrgit_node_modules.xml
new file mode 100644
index 0000000..c34146e
--- /dev/null
+++ b/.idea/libraries/silvrgit_node_modules.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/app.js b/app/app.js
index 0541bef..5da5c49 100644
--- a/app/app.js
+++ b/app/app.js
@@ -214,11 +214,46 @@
});
};
+ var getNextTrainTime = function(toStation,fromStation)
+ {
+ var url = '/getnexttraintimes?from=' + fromStation + '&to=' + toStation ;
+ var target = fromStation + toStation;
+ $.ajax({
+ type: 'GET',
+ url: url,
+ data: '',
+ dataType: 'json',
+
+ timeout: 10000,
+
+ //contentType: ('application/json'),
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+
+ },
+ success: function (data) {
+ console.log(data);
+
+ updateTrain(target,data);
+ //updateFX(fxdata);
+ },
+ error: function (xhr, type) {
+ console.log("ajax error");
+ console.log(xhr);
+ console.log(type);
+ }
+ });
+
+ };
+
+
var getDBEGLQ = function () {
- var url = '/dbeglq';
-
+ // var url = '/dbeglq';
+ var url = '/getnexttraintimes?from=dbe&to=glq';
$.ajax({
type: 'GET',
url: url,
@@ -250,7 +285,8 @@
var getGLQDBE = function () {
- var url = '/glqdbe';
+ //var url = '/glqdbe';
+ var url = '/getnexttraintimes?from=glq&to=dbe';
$.ajax({
type: 'GET',
@@ -388,15 +424,19 @@
get_weather();
btcValue();
getFX();
- getDBEGLQ();
- getGLQDBE();
+ //getDBEGLQ();
+ //getGLQDBE();
+ getNextTrainTime('dbe','glq');
+ getNextTrainTime('glq','dbe');
// start 15 minute timer
_fastTimer = setInterval(function () {
btcValue();
- getDBEGLQ();
- getGLQDBE();
+ // getDBEGLQ();
+ // getGLQDBE();
+ getNextTrainTime('dbe','glq');
+ getNextTrainTime('glq','dbe');
}, (60000));
_slowTimer = setInterval(function () {
diff --git a/app/gfx/information-icon-24.png b/app/gfx/information-icon-24.png
new file mode 100644
index 0000000..6c05b88
Binary files /dev/null and b/app/gfx/information-icon-24.png differ
diff --git a/app/gfx/information-icon-32.png b/app/gfx/information-icon-32.png
new file mode 100644
index 0000000..28f38d3
Binary files /dev/null and b/app/gfx/information-icon-32.png differ
diff --git a/app/jessica.html b/app/jessica.html
new file mode 100644
index 0000000..2803579
--- /dev/null
+++ b/app/jessica.html
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+ Trains
+
+
+
+
+
+
+
+
+
+
+
+
+
Paisley > GLC
-- : --
+
GLC > Partick
-- : --
+
Partick > DBE
-- : --
+
GLQ > DBE
-- : --
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/js/jessica.js b/app/js/jessica.js
new file mode 100644
index 0000000..634539e
--- /dev/null
+++ b/app/js/jessica.js
@@ -0,0 +1,424 @@
+(function () {
+
+ var lastGBP = 0.0,
+ lastUSD = 0.0,
+ _fasttimer, _slowTimer, myBTC =3.49524333;
+ var lows = {
+ gbp: 0,
+ usd: 0
+ },
+ highs = {
+ gbp: 0,
+ usd: 0
+ };
+
+
+ var list = [{
+ title: '101B ends',
+ y: 2013,
+ m: 9,
+ d: 24,
+ add: 1001
+ },
+ {
+ title: 'Ends',
+ y: 2015,
+ m: 4,
+ d: 10
+ }];
+ var addDays = function (myDate, days) {
+ return new Date(myDate.getTime() + days * 24 * 60 * 60 * 1000);
+ };
+
+ var getDays = function (startdate, enddate) {
+ var r, s, e;
+ s = startdate.getTime();
+ e = enddate.getTime();
+ r = (e - s) / (24 * 60 * 60 * 1000);
+ return r;
+ };
+ var tick = function () {
+ var today = new Date();
+ var start101 = new Date();
+ var end101 = new Date();
+ var endContract = new Date();
+ var third = new Date();
+ start101.setFullYear(2013, 9, 24);
+ end101 = addDays(start101, 1001);
+ endContract.setFullYear(2015, 4, 10);
+ third.setFullYear(2013, 7, 25);
+ $('#one').text('101B ends: ' + Math.ceil(getDays(today,
+ end101)) + " days / " + Math.ceil(getDays(today,
+ end101) / 7) + " weeks");
+ $('#two').text('Ends: ' + Math.ceil(getDays(today,
+ endContract)) + " days / " + Math.ceil(getDays(today,
+ endContract) / 7) + " weeks");
+ $('#three').hide();
+ };
+
+ var get_weather = function () {
+ navigator.geolocation.getCurrentPosition(show_weather);
+ };
+ var show_weather = function (position) {
+ var latitude = position.coords.latitude;
+ var longitude = position.coords.longitude;
+ // let's show a map or do something interesting!
+ $.ajax({
+ type: 'GET',
+ url: 'https://api.forecast.io/forecast/0657dc0d81c037cbc89ca88e383b6bbf/' + latitude.toString() + ',' + longitude.toString(),
+ data: '',
+ dataType: 'jsonp',
+ timeout: 10000,
+ context: $('body'),
+ contentType: ('application/json'),
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+
+ },
+ success: function (data) {
+ // console.log(data);
+
+ var calc = ((5.0 / 9.0 * (data.currently.temperature - 32)));
+ $('#weather').html(data.currently.summary + " " + parseInt(calc) + '°c ' + '' + data.daily.summary + '');
+
+ },
+ error: function (xhr, type) {
+ console.log("ajax error");
+ console.log(xhr);
+ console.log(type);
+ }
+ });
+ };
+
+ var updateBTC = function (g, u) {
+ var title, total, elm = $('#btc');
+ if (lastGBP !== 0) {
+
+ elm.removeClass();
+ if (g > lastGBP) {
+ elm.addClass('up');
+ } else if (g < lastGBP) {
+ elm.addClass('down');
+ }
+
+ } else {
+ lows.gbp = g;
+ lows.usd = u;
+
+ highs.gbp = g;
+ highs.usd = u;
+ }
+
+ lastGBP = g;
+ lastUSD = u;
+
+ if (g < lows.gbp) lows.gbp = g;
+ if (u < lows.usd) lows.usd = u;
+
+ if (highs.gbp < g) highs.gbp = g;
+ if (highs.usd < u) highs.usd = u;
+
+ total = myBTC * g;
+
+ title = "High: $" + parseFloat(highs.usd.toFixed(2)) + " / Low $" + parseFloat(lows.usd.toFixed(2));
+ elm.html("$" + parseFloat(u.toFixed(2)) + " / £" + parseFloat(g.toFixed(2)) + " (£" + parseFloat(total.toFixed(2)) + ")");
+
+ elm.prop('title', title);
+ };
+
+
+ var updateFX = function (data) {
+ var title, total, elm = $('#fx');
+ //title = "High: $" + parseFloat(highs.usd.toFixed(2)) + " / Low $" + parseFloat(lows.usd.toFixed(2));
+ elm.html("£1 = $" + parseFloat(data.gpbe.toFixed(2)) + " = " + parseFloat(data.sekex.toFixed(2)) + " SEK");
+
+ // elm.prop('title', title);
+ };
+
+
+ var btcValue = function () {
+ var url = '/btc';
+
+ $.ajax({
+ type: 'GET',
+ url: url,
+ data: '',
+ dataType: 'json',
+
+ timeout: 10000,
+
+ //contentType: ('application/json'),
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+
+ },
+ success: function (data) {
+ // console.log(data);
+ var gbp = data.bpi.GBP.rate_float,
+ usd = data.bpi.USD.rate_float;
+
+ updateBTC(gbp, usd);
+ },
+ error: function (xhr, type) {
+ console.log("ajax error");
+ console.log(xhr);
+ console.log(type);
+ }
+ });
+ };
+
+
+ var getFX = function () {
+ var url = '/fx';
+
+ $.ajax({
+ type: 'GET',
+ url: url,
+ data: '',
+ dataType: 'json',
+
+ timeout: 10000,
+
+ //contentType: ('application/json'),
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+
+ },
+ success: function (data) {
+ //console.log(data);
+ var gpbex = (1 / data.rates.GBP);
+ var sekex = (gpbex * data.rates.SEK);
+ var fxdata = {
+ usd: 1,
+ gbp: data.rates.GBP,
+ sek: data.rates.SEK,
+ gpbe: gpbex,
+ sekex: sekex
+ };
+ // console.log(fxdata);
+ //var fxdata = data.bpi.GBP.rate_float, usd = data.bpi.USD.rate_float;
+
+ updateFX(fxdata);
+ },
+ error: function (xhr, type) {
+ console.log("ajax error");
+ console.log(xhr);
+ console.log(type);
+ }
+ });
+ };
+
+ var getNextTrainTime = function(toStation,fromStation)
+ {
+ var url = '/getnexttraintimes?from=' + fromStation + '&to=' + toStation ;
+ var target = fromStation + toStation;
+ console.log('Target: ' + target);
+ $.ajax({
+ type: 'GET',
+ url: url,
+ data: '',
+ dataType: 'json',
+
+ timeout: 10000,
+
+ //contentType: ('application/json'),
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+
+ },
+ success: function (data) {
+ console.log(data);
+
+ updateTrain(target,data);
+ //updateFX(fxdata);
+ },
+ error: function (xhr, type) {
+ console.log("ajax error");
+ console.log(xhr);
+ console.log(type);
+ }
+ });
+
+ };
+
+ var updateTrain = function (n, obj) {
+ var elm = $('#'+n);
+
+ var output, status;
+
+
+ output = (obj.eta == "On Time") ? obj.eta : obj.sta;
+ status = (obj.eta == "On Time") ? 'delayed' : 'ontime';
+
+ elm.html(output);
+
+ elm.prop('class', status);
+ };
+
+ var getTrainsCB = function (results) {
+ var dest$ = $('#trainResults');
+ var html = new EJS({url: '/template/trains.ejs'}).render(results);
+
+ // console.log(html);
+ dest$.empty();
+ dest$.append(html);
+ // dest$.toggle();
+
+ };
+
+ var getTrains = function(from, to) {
+ var url = '/gettrains?from=' + from + "&to=" + to;
+
+ $.ajax({
+ type: 'GET',
+ url: url,
+ data: '',
+ dataType: 'json',
+
+ timeout: 10000,
+
+ //contentType: ('application/json'),
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+
+ },
+ success: function (data) {
+ //console.log(data);
+
+ // updateTrain('glqdbe',data);
+ getTrainsCB(data);
+ },
+ error: function (xhr, type) {
+ console.log("ajax error");
+ console.log(xhr);
+ console.log(type);
+ }
+ });
+ };
+
+ var formatPassword = function (data) {
+
+
+ var dest$ = $('#passwordOut');
+ var html = new EJS({url: '/template/password.ejs'}).render(data);
+
+ console.log(html);
+ dest$.empty();
+ dest$.append(html);
+ dest$.show();
+ };
+
+
+ var generatePassword = function(from, to) {
+ var url = '/generate';
+
+ $.ajax({
+ type: 'GET',
+ url: url,
+ data: '',
+ dataType: 'json',
+
+ timeout: 10000,
+
+ //contentType: ('application/json'),
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'PUT, GET, POST, DELETE, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type'
+
+ },
+ success: function (data) {
+ console.log(data);
+
+ formatPassword(data);
+ },
+ error: function (xhr, type) {
+ console.log("ajax error");
+ console.log(xhr);
+ console.log(type);
+ }
+ });
+ };
+
+
+
+ tick();
+ get_weather();
+ // btcValue();
+ // getFX();
+ //getDBEGLQ();
+ //getGLQDBE();
+ getNextTrainTime('glc','pyg');
+ getNextTrainTime('dbe','glq');
+ getNextTrainTime('ptk','glc');
+ getNextTrainTime('dbe','ptk');
+
+
+
+ // start 15 minute timer
+
+ _fastTimer = setInterval(function () {
+ //btcValue();
+ // getDBEGLQ();
+ // getGLQDBE();
+ getNextTrainTime('glc','pyg');
+ getNextTrainTime('dbe','glq');
+ getNextTrainTime('ptk','glc');
+ getNextTrainTime('dbe','ptk');
+ }, (60000));
+
+ _slowTimer = setInterval(function () {
+
+ // getFX();
+ get_weather();
+ }, (60000 * 15));
+
+
+
+ $('#glqdbeB').on('click',function(){
+ getTrains('glq','dbe');
+ });
+
+ $('#pygglcB').on('click',function(){
+ getTrains('pyg','glc');
+ });
+
+ $('#glcptkB').on('click',function(){
+ getTrains('glc','ptk');
+ });
+
+ $('#ptkdbeB').on('click',function(){
+ getTrains('ptk','dbe');
+ });
+
+
+
+
+
+})();
+
+var popitout = function (url) {
+ newwindow = window.open(url, 'name', 'height=600,width=570');
+ if (window.focus) {
+ newwindow.focus()
+ }
+ return false;
+};
+
+var popitoutSmall = function (url) {
+ newwindow = window.open(url, 'name', 'height=400,width=520');
+ if (window.focus) {
+ newwindow.focus()
+ }
+ return false;
+};
diff --git a/app/template/trains.ejs b/app/template/trains.ejs
index 4892e33..1c6b2c2 100644
--- a/app/template/trains.ejs
+++ b/app/template/trains.ejs
@@ -1,4 +1,4 @@
-To: <%=filterLocationName%>
+<%=locationName%> TO <%=filterLocationName%>
Destination |
Time |
diff --git a/lib/train.js b/lib/train.js
index 149a276..de1a924 100644
--- a/lib/train.js
+++ b/lib/train.js
@@ -83,6 +83,45 @@ module.exports = {
res.end(JSON.stringify({}));
}
+ },
+ getNextTrainTimes: function(req, res) {
+ console.log(req);
+ console.log('---------');
+ console.log(req.query);
+ var trainFrom, trainTo, trainToken, url;
+ if (req.query.hasOwnProperty('from') && req.query.hasOwnProperty('from')) {
+ trainFrom = req.query.from;
+ trainTo = req.query.to;
+ trainToken = trainFrom + trainTo;
+ url = '/next/' + trainFrom + '/to/' + trainTo + '/1?accessToken=215b99fe-b237-4a01-aadc-cf315d6756d8';
+ console.log('Requesting latest time for : ' + trainToken);
+
+ var now = new Date();
+ var nowSeconds = (now.getHours() * (60 * 60)) + (now.getMinutes() * 60);
+ console.log('Now Seconds: ' + nowSeconds);
+ if (trainCache.last[trainToken] == null || nowSeconds != trainCache.last[trainToken]) {
+
+ Query(function (a, b) {
+
+ var ts = a.departures[0].service;
+ var output = {};
+ console.log(ts);
+ //GLOBAL.lastcheck = now;
+ console.log(ts.sta);
+ console.log(toSeconds(ts.sta));
+
+ output.sta = ts.sta;
+ output.eta = ts.eta;
+ trainCache.data[trainToken] = output;
+ // trainCache.last.glqdbe = toSeconds(ts.sta);
+ // console.log(ts);
+ res.setHeader('Content-Type', 'application/json');
+ res.end(JSON.stringify(trainCache.data[trainToken]));
+ }, res, 'huxley.apphb.com', url);
+
+ }
+ }
+
}
};
diff --git a/package.json b/package.json
index 11ab6df..c240d07 100644
--- a/package.json
+++ b/package.json
@@ -2,11 +2,12 @@
"name": "silvrtree",
"version": "0.1.1",
"devDependencies": {
- "mongodb": "*",
- "node-rss": "^1.0.1",
- "pg": "*"
+ "htmlparser": "^1.7.7",
+ "mammoth": "^0.3.25-pre.1",
+ "wordsoap": "^0.2.0"
},
"dependencies": {
- "express": "3.x"
+ "express": "3.x",
+ "unstyler": "^0.2.2"
}
}
diff --git a/web-server.js b/web-server.js
index 9c7a806..d0d3c18 100644
--- a/web-server.js
+++ b/web-server.js
@@ -1,4 +1,6 @@
-var express = require('express'), path = require('path'), http = require('http'), fx = require('./lib/fx'), btc = require('./lib/btc'), train = require('./lib/train'), password = require('./lib/password')
+var express = require('express'), path = require('path'), http = require('http'),
+ fx = require('./lib/fx'), btc = require('./lib/btc'), train = require('./lib/train'),
+ password = require('./lib/password'), clean = require('./lib/clean')
//train = require('lib/train')
/* ,submit = require('./routes/mongo/submit') */
;
@@ -32,9 +34,12 @@ app.configure(function () {
app.use('/dbeglq', train.dbe_glq);
app.use('/glqdbe', train.glq_dbe);
app.use('/gettrains', train.getTrainTimes);
+ app.use('/getnexttraintimes', train.getNextTrainTimes);
app.use('/generate', password.generate);
+ app.use('/cleanit', clean.cleanit);
+
app.use('/lot', function (req, res) {
var pg = require('pg');
---|