Files
2026-05-23 22:10:14 +08:00

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'));
});
}
};