96 lines
3.6 KiB
JavaScript
96 lines
3.6 KiB
JavaScript
var ContentModule = React.createClass({
|
|
requestServerList: function() {
|
|
var _this = this;
|
|
fetch('/spaceport/servers.json')
|
|
.then(function(response) {
|
|
response.json().then(function(data) {
|
|
console.debug(data);
|
|
_this.setState({serverList: data})
|
|
});
|
|
})
|
|
.catch(function(err){
|
|
console.error(err);
|
|
});
|
|
},
|
|
convertToChart: function(pingList) {
|
|
var resultArray = [];
|
|
pingList.forEach(function(pingData){
|
|
resultArray.push({x: pingData.time, y: pingData.online})
|
|
});
|
|
return resultArray;
|
|
},
|
|
clickServerListItem: function(title) {
|
|
var _this = this;
|
|
fetch('/spaceport/servers.json?clientid='+title)
|
|
.then(function(response){
|
|
response.json().then(function(data){
|
|
console.debug(data);
|
|
_this.refs.serverInfo.setState({
|
|
title: data.name,
|
|
data: _this.convertToChart(data.pingList)
|
|
});
|
|
});
|
|
})
|
|
.catch(function(err){
|
|
console.error(err);
|
|
});
|
|
},
|
|
/*--------------------*/
|
|
getInitialState: function(){return{
|
|
nvScriptReady: 0,
|
|
serverList: []
|
|
}},
|
|
componentWillMount: function(){
|
|
var _this = this;
|
|
|
|
loadScript("/spaceport/components.js",
|
|
function(){ _this.setState({nvScriptReady: _this.state.nvScriptReady+1}); console.debug('components - ok'); },
|
|
function(){ _this.setState({nvScriptReady: -5}); console.debug('components - error'); }
|
|
);
|
|
|
|
loadScript("https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js",
|
|
function(){
|
|
_this.setState({nvScriptReady: _this.state.nvScriptReady+1}); console.info('d3 - ok');
|
|
loadStyle("https://cdnjs.cloudflare.com/ajax/libs/nvd3/1.8.5/nv.d3.min.css");
|
|
loadScript("https://cdnjs.cloudflare.com/ajax/libs/nvd3/1.8.5/nv.d3.js",
|
|
function(){ _this.setState({nvScriptReady: _this.state.nvScriptReady+1}); console.info('nv - ok'); },
|
|
function(){ _this.setState({nvScriptReady: -5}); console.error('nv - error'); }
|
|
);
|
|
},
|
|
function(){ _this.setState({nvScriptReady: -5}); console.error('d3 - error'); }
|
|
);
|
|
|
|
loadScript("/spaceport/ansi_up.js",
|
|
function(){ console.debug('ansi_up - ok'); },
|
|
function(){ console.debug('ansi_up - error'); }
|
|
);
|
|
|
|
loadStyle("/spaceport/moduleStyle.css");
|
|
|
|
this.requestServerList();
|
|
},
|
|
render: function(){
|
|
var element;
|
|
if (this.state.nvScriptReady === 3) {
|
|
var _this = this;
|
|
var serverListItems = [];
|
|
this.state.serverList.forEach(function(item){
|
|
serverListItems.push(ce(ServerListItem, {title: item, onClick: _this.clickServerListItem.bind(_this, item)}));
|
|
});
|
|
|
|
element = ce('div', {className: 'row'},
|
|
ce('div', {className: 'col-md-3'}, ce(ServerList, null, serverListItems)),
|
|
ce('div', {className: 'col-md-9'}, ce(ServerInfo, {ref: "serverInfo"}))
|
|
);
|
|
} else if (this.state.nvScriptReady < 0) {
|
|
element = ce('span', null, 'error');
|
|
} else {
|
|
element = ce('span', null, 'loading...');
|
|
}
|
|
|
|
return(
|
|
ce(Panel, {title: 'Серверы'}, element)
|
|
)
|
|
}
|
|
});
|