2017-03-05 11:29:21 +00:00
define ( [ 'moment' , 'utils/router' , 'leaflet' , 'gui' , 'helper' , 'utils/language' ] ,
function ( moment , Router , L , GUI , helper , Language ) {
2017-01-29 23:51:08 +00:00
'use strict' ;
2016-05-27 21:59:01 +00:00
2016-05-22 12:51:30 +00:00
return function ( config ) {
function handleData ( data ) {
2017-10-29 14:11:24 +00:00
var timestamp ;
var nodes = [ ] ;
var links = [ ] ;
2017-10-29 15:10:25 +00:00
var nodeDict = { } ;
2016-05-22 12:51:30 +00:00
for ( var i = 0 ; i < data . length ; ++ i ) {
2017-10-29 14:11:24 +00:00
nodes = nodes . concat ( data [ i ] . nodes ) ;
timestamp = data [ i ] . timestamp ;
2017-10-27 19:17:43 +00:00
links = links . concat ( data [ i ] . links ) ;
2016-05-22 12:51:30 +00:00
}
2015-04-07 19:10:37 +00:00
2016-05-22 12:51:30 +00:00
nodes . forEach ( function ( node ) {
node . firstseen = moment . utc ( node . firstseen ) . local ( ) ;
node . lastseen = moment . utc ( node . lastseen ) . local ( ) ;
} ) ;
2015-03-24 23:54:00 +00:00
2016-05-22 12:51:30 +00:00
var now = moment ( ) ;
2017-01-29 23:51:08 +00:00
var age = moment ( now ) . subtract ( config . maxAge , 'days' ) ;
2015-03-24 23:54:00 +00:00
2017-10-31 12:32:39 +00:00
var online = nodes . filter ( function ( d ) {
return d . is _online ;
} ) ;
var offline = nodes . filter ( function ( d ) {
return ! d . is _online ;
} ) ;
var newnodes = helper . limit ( 'firstseen' , age , helper . sortByKey ( 'firstseen' , online ) ) ;
var lostnodes = helper . limit ( 'lastseen' , age , helper . sortByKey ( 'lastseen' , offline ) ) ;
2015-03-24 23:54:00 +00:00
2017-02-12 23:31:31 +00:00
nodes . forEach ( function ( d ) {
d . neighbours = [ ] ;
2017-10-29 15:10:25 +00:00
nodeDict [ d . node _id ] = d ;
2017-02-12 23:31:31 +00:00
} ) ;
2016-05-22 12:51:30 +00:00
links . forEach ( function ( d ) {
2017-10-29 19:14:09 +00:00
d . source = nodeDict [ d . source ] ;
d . target = nodeDict [ d . target ] ;
2017-10-29 14:11:24 +00:00
2017-10-29 11:36:57 +00:00
d . id = [ d . source . node _id , d . target . node _id ] . join ( '-' ) ;
d . source . neighbours . push ( { node : d . target , link : d } ) ;
d . target . neighbours . push ( { node : d . source , link : d } ) ;
2016-05-22 12:51:30 +00:00
2017-02-12 23:31:31 +00:00
try {
d . latlngs = [ ] ;
2017-10-29 14:11:24 +00:00
d . latlngs . push ( L . latLng ( d . source . location . latitude , d . source . location . longitude ) ) ;
d . latlngs . push ( L . latLng ( d . target . location . latitude , d . target . location . longitude ) ) ;
2016-05-22 12:51:30 +00:00
2017-02-12 23:31:31 +00:00
d . distance = d . latlngs [ 0 ] . distanceTo ( d . latlngs [ 1 ] ) ;
} catch ( e ) {
// ignore exception
2016-05-22 12:51:30 +00:00
}
} ) ;
return {
now : now ,
2017-10-29 14:11:24 +00:00
timestamp : moment . utc ( timestamp ) . local ( ) ,
2016-05-22 12:51:30 +00:00
nodes : {
all : nodes ,
2017-10-31 12:32:39 +00:00
online : online ,
offline : offline ,
2016-05-22 12:51:30 +00:00
new : newnodes ,
lost : lostnodes
} ,
2017-10-29 14:11:24 +00:00
links : links ,
2017-10-29 15:10:25 +00:00
nodeDict : nodeDict
2016-05-22 12:51:30 +00:00
} ;
}
2016-05-26 16:37:24 +00:00
2017-02-12 00:29:37 +00:00
var language = new Language ( config ) ;
2017-03-05 11:29:21 +00:00
var router = new Router ( language ) ;
2016-05-22 12:51:30 +00:00
2017-10-31 12:32:39 +00:00
config . dataPath . forEach ( function ( d , i ) {
config . dataPath [ i ] += 'meshviewer.json' ;
} ) ;
2016-05-22 12:51:30 +00:00
2017-10-31 07:34:18 +00:00
language . init ( router ) ;
2016-05-22 12:51:30 +00:00
function update ( ) {
2017-10-31 12:32:39 +00:00
return Promise . all ( config . dataPath . map ( helper . getJSON ) )
2016-05-22 12:51:30 +00:00
. then ( handleData ) ;
}
update ( )
. then ( function ( d ) {
2017-02-12 00:29:37 +00:00
var gui = new GUI ( config , router , language ) ;
2016-05-22 12:51:30 +00:00
gui . setData ( d ) ;
router . setData ( d ) ;
2017-03-05 11:29:21 +00:00
router . resolve ( ) ;
2016-05-22 12:51:30 +00:00
window . setInterval ( function ( ) {
2017-01-29 23:51:08 +00:00
update ( ) . then ( function ( n ) {
gui . setData ( n ) ;
router . setData ( n ) ;
2016-05-22 12:51:30 +00:00
} ) ;
} , 60000 ) ;
} )
. catch ( function ( e ) {
2017-03-18 17:53:59 +00:00
document . querySelector ( '.loader' ) . innerHTML += e . message
2017-10-21 00:06:42 +00:00
+ '<br /><br /><button onclick="location.reload(true)" class="btn text" aria-label="Try to reload">Try to reload</button><br /> or report to your community' ;
2016-05-26 16:37:24 +00:00
console . warn ( e ) ;
2016-05-22 12:51:30 +00:00
} ) ;
} ;
} ) ;