188 lines
7.0 KiB
JavaScript
188 lines
7.0 KiB
JavaScript
/*-----------------------------------------------------+
|
|
* 服务端相关处理
|
|
* @author yeahoo2000@gmail.com
|
|
+-----------------------------------------------------*/
|
|
var Server = {
|
|
console: null,
|
|
gamenode: '',
|
|
url: '',
|
|
ref: null,
|
|
|
|
init: function(){
|
|
Server.console = $('#console');
|
|
Server.url = Server.console.attr('url');
|
|
Server.gamenode = $('#select-gamenode').val();
|
|
Server.autoRefresh();
|
|
|
|
// 激活数据文件选择框
|
|
$('a.file_selector').popup({on: 'click', lastResort:'bottom left'});
|
|
$('form.file_selector .checkbox').checkbox().click(function(){
|
|
var str = ',' + $('#files').val() + ',';
|
|
var val = $(this).find('input[type=checkbox]').attr('value');
|
|
if($(this).hasClass("checked")){
|
|
if(str.indexOf(',' + val + ',') >= 0){
|
|
return;
|
|
}else if($('#files').val() == ""){
|
|
$('#files').val(val);
|
|
}else{
|
|
$('#files').val($('#files').val() + "," + val);
|
|
}
|
|
}else if(str.indexOf(',' + val + ',') >= 0){
|
|
str = str.replace(','+ val, '');
|
|
$('#files').val(str.replace(/^,|,$/g, ''));
|
|
}
|
|
});
|
|
$('form.file_selector .submit').click(function(){
|
|
var form = $('form.file_selector');
|
|
var btn = $('form.file_selector .submit');
|
|
var url = form.attr('url') + "?" + form.serialize();
|
|
if($(this).hasClass('hotswap')) url += "&hotswap=true&name=" + Server.gamenode;
|
|
if($(this).attr('url')) url = $(this).attr('url');
|
|
btn.addClass('disabled');
|
|
App.time_count(0);
|
|
$.get(url, function(data){
|
|
$("#result").html(data);
|
|
btn.removeClass('disabled');
|
|
$('#time_count').remove();
|
|
Server.reloadConsole();
|
|
});
|
|
});
|
|
$('#files').change(function(){
|
|
var str = ',' + $(this).val() + ',';
|
|
$('form.file_selector .checkbox').each(function(){
|
|
if(str.indexOf(',' + $(this).find('input[type=checkbox]').attr('value') + ',') >= 0){
|
|
if(!$(this).hasClass('checked')) $(this).click();
|
|
}else{
|
|
if($(this).hasClass('checked')) $(this).click();
|
|
}
|
|
});
|
|
});
|
|
$('.f_update').click(function(){
|
|
$('form.file_selector .checkbox').not('.checked').has('label font').click();
|
|
});
|
|
$('.f_clear').click(function(){
|
|
$('#files').val('');
|
|
$('form.file_selector .checkbox.checked').click();
|
|
});
|
|
function find(s){
|
|
$('form.file_selector .checkbox').removeClass('find').has('input[type=checkbox][value^='+s+']')
|
|
.addClass('find').first().each(function(){
|
|
var p = $(this).closest('div.fields').scrollTop(0);
|
|
p.scrollTop(Math.max(0, $(this).position().top - p.position().top - 10));
|
|
});
|
|
}
|
|
$('.f_sel').click(function(){
|
|
if($(this).hasClass('findt')){
|
|
$(this).removeClass('findt');
|
|
$('form.file_selector .checkbox').removeClass('find');
|
|
return;
|
|
}
|
|
$('.f_sel').removeClass('findt');
|
|
find($(this).addClass('findt').text());
|
|
});
|
|
$('.f_find').keyup(function(e){
|
|
if(e.keyCode == 32 || e.keyCode == 13){
|
|
$('form.file_selector .checkbox.find').not('.checked').removeClass('find').click();
|
|
$(this).val('');
|
|
}else{
|
|
find($(this).val());
|
|
}
|
|
});
|
|
$('#cmd').keydown(function(e){
|
|
if(e.keyCode == 13){
|
|
var url = $(this).attr('url') + "?cmd=" + encodeURIComponent($(this).val()) + "&name=" + Server.gamenode;
|
|
$(this).addClass('disabled').val('');
|
|
App.time_count(0);
|
|
$.get(url, function(data){
|
|
$(this).removeClass('disabled');
|
|
$("#result").html(data);
|
|
Server.reloadConsole();
|
|
$('#time_count').remove();
|
|
});
|
|
}
|
|
});
|
|
|
|
// 激活地图数据生成菜单
|
|
$('.gen_map').dropdown({on: 'hover'});
|
|
// 激活编译服务器菜单
|
|
$('.make_srv').dropdown({on: 'hover'});
|
|
|
|
// 激活服务器选择菜单
|
|
$('.select-gamenode').dropdown({
|
|
onChange: function(val){
|
|
if(undefined === val) return;
|
|
Server.gamenode = $('#select-gamenode').val();
|
|
}
|
|
});
|
|
|
|
// 激活按键
|
|
$('.srv_btns').click(function(){
|
|
var el = $(this);
|
|
if(el.hasClass('disabled')) return;
|
|
if(el.attr('confirm') && !confirm(el.attr('confirm'))) return;
|
|
|
|
if(el.attr('url')){
|
|
// 禁用所有按钮
|
|
$('.srv_btns').each(function(){
|
|
$(this).removeClass('btn').addClass('disabled');
|
|
});
|
|
var url = el.attr('url');
|
|
url += (url.indexOf('?') >= 0 ? "&":"?") + "name=" + Server.gamenode;
|
|
App.time_count(0);
|
|
$.get(url, function(data){
|
|
$("#result").html(data);
|
|
$('#time_count').remove();
|
|
Server.reloadConsole();
|
|
// 恢复所有按钮
|
|
$('.srv_btns').each(function(){
|
|
$(this).removeClass('disabled').addClass('btn');
|
|
});
|
|
});
|
|
}
|
|
});
|
|
|
|
// 当鼠标滚动超过底部时阻滚动父窗体
|
|
Server.console.bind('mousewheel', function(e, d){
|
|
var t = $(this);
|
|
if(d > 0 && t.scrollTop() === 0){
|
|
e.preventDefault();
|
|
}else{
|
|
if(d < 0 && (t.scrollTop() == t.get(0).scrollHeight - t.innerHeight())){
|
|
e.preventDefault();
|
|
}
|
|
}
|
|
});
|
|
},
|
|
|
|
// 自动刷新
|
|
autoRefresh: function(){
|
|
var c = Server.console;
|
|
var b = $('body');
|
|
var w = $(window);
|
|
// 当滚动条到达底部时自动刷新内容
|
|
if(
|
|
!Server.ref ||
|
|
(
|
|
(c.prop('scrollHeight') - c.scrollTop() <= c.height() + 30) &&
|
|
(b.prop('scrollHeight') - w.scrollTop() <= b.height() + 30)
|
|
)
|
|
){
|
|
Server.reloadConsole();
|
|
}
|
|
|
|
if(!Server.ref){
|
|
Server.ref = setInterval(Server.autoRefresh, 2000);
|
|
c.scrollTop(c.prop('scrollHeight'));
|
|
}
|
|
},
|
|
|
|
// 重载console
|
|
reloadConsole : function(){
|
|
$.get(Server.url + '?platform=' + Server.platform, function(data){
|
|
Server.console.empty();
|
|
Server.console.html(data);
|
|
Server.console.scrollTop(Server.console.prop('scrollHeight'));
|
|
});
|
|
}
|
|
};
|