var ZeroTierNode = React.createClass({ getInitialState: function() { return { address: '----------', online: false, version: '_._._', _networks: [], _peers: [] }; }, ago: function(ms) { if (ms > 0) { var tmp = Math.round((Date.now() - ms) / 1000); return ((tmp > 0) ? tmp : 0); } else return 0; }, updatePeers: function() { Ajax.call({ url: 'peer?auth='+this.props.authToken, cache: false, type: 'GET', success: function(data) { if (data) { var pl = JSON.parse(data); if (Array.isArray(pl)) { this.setState({_peers: pl}); } } }.bind(this), error: function() { }.bind(this) }); }, updateNetworks: function() { Ajax.call({ url: 'network?auth='+this.props.authToken, cache: false, type: 'GET', success: function(data) { if (data) { var nwl = JSON.parse(data); if (Array.isArray(nwl)) { this.setState({_networks: nwl}); } } }.bind(this), error: function() { }.bind(this) }); }, updateAll: function() { Ajax.call({ url: 'status?auth='+this.props.authToken, cache: false, type: 'GET', success: function(data) { if (data) this.setState(JSON.parse(data)); this.updateNetworks(); this.updatePeers(); }.bind(this), error: function() { this.setState({online: false}); }.bind(this) }); }, joinNetwork: function(event) { event.preventDefault(); alert('foo'); }, handleNetworkIdEntry: function(event) { var nid = event.target.value; if (nid) { nid = nid.toLowerCase(); var nnid = ''; for(var i=0;((i= 0) nnid += nid.charAt(i); } this.networkToJoin = nnid; event.target.value = nnid; } else { this.networkToJoin = ''; event.target.value = ''; } }, componentDidMount: function() { this.tabIndex = 0; this.updateAll(); this.updateIntervalId = setInterval(this.updateAll,2500); }, componentWillUnmount: function() { clearInterval(this.updateIntervalId); }, render: function() { return (
  
{ (this.tabIndex === 1) ? (
Address
Version
Latency
Direct Paths
Role
{ this.state._peers.map(function(peer) { return (
{peer['address']}
{(peer['version'] === '-1.-1.-1') ? '-' : peer['version']}
{peer['latency']}
{ (peer['paths'].length === 0) ? (
(none)
) : (
{ peer['paths'].map(function(path) { if ((path.active)||(path.fixed)) { return (
{path.address} {this.ago(path.lastSend)} {this.ago(path.lastReceive)}{path.preferred ? ' *' : ''}
); } else { return (
{path.address} {this.ago(path.lastSend)} {this.ago(path.lastReceive)}
); } }.bind(this)) }
) }
{peer['role']}
); }.bind(this)) }
) : (
{ this.state._networks.map(function(network) { return React.createElement('div',{className: 'network'},React.createElement(ZeroTierNetwork,network)); }.bind(this)) }
) }
{this.state.address}  {this.state.online ? 'ONLINE' : 'OFFLINE'}  {this.state.version}
); } });