UI work...

This commit is contained in:
Adam Ierymenko 2015-05-06 19:39:45 -07:00
parent 03dbec960a
commit e58047eaa0
3 changed files with 84 additions and 15 deletions

View File

@ -1,12 +1,36 @@
var ZeroTierNetwork = React.createClass({ var ZeroTierNetwork = React.createClass({
getInitialState: function() {
return {
deleted: false
};
},
leaveNetwork: function(event) { leaveNetwork: function(event) {
Ajax.call({
url: 'network/'+this.props.nwid+'?auth='+this.props.authToken,
cache: false,
type: 'DELETE',
success: function(data) {
this.setState({deleted: true});
}.bind(this),
error: function(error) {
}.bind(this)
});
event.preventDefault(); event.preventDefault();
}, },
render: function() { render: function() {
return ( return (
<div className="zeroTierNetwork"> <div className="zeroTierNetwork">
<div className="networkInfo"><span className="zeroTierAddress">{this.props.nwid}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>[</b>&nbsp;<span>{this.props.name}</span>&nbsp;<b>]</b></div> {
(this.state.deleted) ? (
<div className="deletedOverlay">&nbsp;</div>
) : (null)
}
<div className="networkInfo">
<span className="networkId">{this.props.nwid}</span>
<span className="networkName">{this.props.name}</span>
</div>
<div className="networkProps"> <div className="networkProps">
<div className="row"> <div className="row">
<div className="name">Status</div> <div className="name">Status</div>

View File

@ -56,8 +56,11 @@ var ZeroTierNode = React.createClass({
cache: false, cache: false,
type: 'GET', type: 'GET',
success: function(data) { success: function(data) {
if (data) if (data) {
this.setState(JSON.parse(data)); var status = JSON.parse(data);
this.setState(status);
document.title = 'ZeroTier One [' + status.address + ']';
}
this.updateNetworks(); this.updateNetworks();
this.updatePeers(); this.updatePeers();
}.bind(this), }.bind(this),
@ -68,7 +71,17 @@ var ZeroTierNode = React.createClass({
}, },
joinNetwork: function(event) { joinNetwork: function(event) {
event.preventDefault(); event.preventDefault();
alert('foo'); if ((this.networkToJoin)&&(this.networkToJoin.length === 16)) {
Ajax.call({
url: 'network/'+this.networkToJoin+'?auth='+this.props.authToken,
cache: false,
type: 'POST',
success: function(data) {
}.bind(this),
error: function() {
}.bind(this)
});
}
}, },
handleNetworkIdEntry: function(event) { handleNetworkIdEntry: function(event) {
var nid = event.target.value; var nid = event.target.value;
@ -154,6 +167,7 @@ var ZeroTierNode = React.createClass({
<div className="networks"> <div className="networks">
{ {
this.state._networks.map(function(network) { this.state._networks.map(function(network) {
network['authToken'] = this.props.authToken;
return React.createElement('div',{className: 'network'},React.createElement(ZeroTierNetwork,network)); return React.createElement('div',{className: 'network'},React.createElement(ZeroTierNetwork,network));
}.bind(this)) }.bind(this))
} }

View File

@ -73,19 +73,19 @@ html,body {
background: #eeeeee; background: #eeeeee;
} }
.zeroTierNode > .middle > .middleScroll > .networks { .zeroTierNode > .middle > .middleScroll > .networks {
display: table; display: block;
width: 100%; width: auto;
padding: 0; padding: 0;
margin: 0; margin: 0;
border: 0; border: 0;
border-collapse: collapse; border-collapse: collapse;
} }
.zeroTierNode > .middle > .middleScroll > .networks > .network { .zeroTierNode > .middle > .middleScroll > .networks > .network {
width: 100%; padding: 0.5rem;
padding: 0; margin: 0.25rem;
margin: 0; float: left;
display: table-row; display: inline-block;
border-bottom: 1px solid #234447; border: 1px solid #234447;
background: #ffffff; background: #ffffff;
} }
.zeroTierNode > .middle > .middleScroll > .peers { .zeroTierNode > .middle > .middleScroll > .peers {
@ -180,25 +180,56 @@ html,body {
} }
.zeroTierNetwork { .zeroTierNetwork {
width: 100%; padding: 0;
padding: 0.5rem 0.5rem 0.5rem 0.5rem;
margin: 0; margin: 0;
display: inline-block;
text-align: right;
width: 100%;
position: relative;
}
.zeroTierNetwork .deletedOverlay {
width: 100%;
height: 100%;
position: absolute;
background: rgba(255,255,255,0.8);
display: block;
top: 0;
left: 0;
z-index: 2;
} }
.zeroTierNetwork .networkInfo { .zeroTierNetwork .networkInfo {
padding: 0 0 0.5rem 0; padding: 0 0 0.5rem 0;
text-align: left;
font-size: 12pt;
}
.zeroTierNetwork .networkInfo .networkId {
font-size: 10pt;
font-family: monospace;
color: #91a2a3;
}
.zeroTierNetwork .networkInfo .networkName {
padding: 0 0 0 1rem;
float: right;
font-size: 12pt;
} }
.zeroTierNetwork .networkProps { .zeroTierNetwork .networkProps {
padding: 0 0 0.5rem 0; width: 100%;
display: table; display: table;
padding: 0;
margin: 0 auto 0 auto;
border-top: 1px solid #999999;
border-bottom: 1px solid #999999;
} }
.zeroTierNetwork .networkProps > .row { .zeroTierNetwork .networkProps > .row {
display: table-row; display: table-row;
} }
.zeroTierNetwork .networkProps > .row > .name { .zeroTierNetwork .networkProps > .row > .name {
display: table-cell; display: table-cell;
font-size: 10pt;
padding: 0.1rem 0.5rem 0.1rem 0.5rem; padding: 0.1rem 0.5rem 0.1rem 0.5rem;
} }
.zeroTierNetwork .networkProps > .row > .value { .zeroTierNetwork .networkProps > .row > .value {
font-size: 10pt;
display: table-cell; display: table-cell;
padding: 0.1rem 0.5rem 0.1rem 0.5rem; padding: 0.1rem 0.5rem 0.1rem 0.5rem;
background: #eeeeee; background: #eeeeee;
@ -207,7 +238,7 @@ html,body {
} }
.zeroTierNetwork .ipAddress { .zeroTierNetwork .ipAddress {
font-family: monospace; font-family: monospace;
font-size: 12pt; font-size: 10pt;
} }
.zeroTierNetwork .leaveNetworkButton { .zeroTierNetwork .leaveNetworkButton {
padding: 0.25rem 0.5rem 0.25rem 0.5rem; padding: 0.25rem 0.5rem 0.25rem 0.5rem;