app/assets/javascripts/reservation.js.erb
var free_servers;
function loadReservationPage() {
function formatServer(server) {
return "<span class='flags flags-" + server.flag + "'></span>" + server.text;
};
function enableDefaultWhitelist() {
$("#reservation_whitelist_id").val('');
$(".reservation_whitelist").hide();
$("#reservation_custom_whitelist_id").val('');
$(".reservation_custom_whitelist_id").hide();
};
function enableLeagueWhitelist() {
$(".reservation_whitelist").show();
$("#reservation_custom_whitelist_id").val('', true);
$(".reservation_custom_whitelist_id").hide();
};
function enableCustomWhitelist() {
$(".reservation_custom_whitelist_id").show();
$("#reservation_whitelist_id").val('');
$(".reservation_whitelist").hide();
};
if ($("#whitelist_type_default_whitelist").is(':checked')) { enableDefaultWhitelist(); };
if ($("#whitelist_type_league_whitelist").is(':checked')) { enableLeagueWhitelist(); };
if ($("#whitelist_type_custom_whitelist").is(':checked')) { enableCustomWhitelist(); };
$("#reservation_whitelist_id").select2();
$("#reservation_first_map").select2({
allowClear: true
});
$("#reservation_server_config_id").select2({
allowClear: true
});
$("#reservation_server_id").select2({
formatResult: formatServer,
formatSelection: formatServer,
formatNoMatches: function() {
return "No more servers available between " + startsAt().val() + " and " + endsAt().val();
},
data: function() { return {results: free_servers}; },
escapeMarkup: function(m) { return m }
});
selectCurrentServer();
$("#whitelist_type_default_whitelist").change(function() {
enableDefaultWhitelist();
});
$("#whitelist_type_custom_whitelist").change(function() {
enableCustomWhitelist();
});
$("#whitelist_type_league_whitelist").change(function() {
enableLeagueWhitelist();
});
function findFreeServers() {
enableSpinner("reservation_server_id");
$.post(find_server_url, $("form.reservation").serialize() ).done(function( data ) {
free_servers = [];
$.each(data.servers, function(idx, server) {
free_servers.push({id: server.id, text: server.name, flag: server.flag, ip_and_port: server.ip_and_port, ip: server.ip});
});
if (data.servers.length == 0) {
$(".buy_premium").slideDown();
} else {
$(".buy_premium").slideUp();
};
selectCurrentServer();
disableSpinner("reservation_server_id");
});
};
function pingCurrentServer() {
currentServerId = serverId();
$.each(free_servers, function(idx, server) {
if (server.id == serverId().val()) {
showSpinner("reservation_ping");
enableSpinner("reservation_ping");
new pingServer(server.ip, function(ping, e) {;
setPing(ping, server.id);
});
};
});
};
function clearPing() {
$("#reservation_ping").val(null);
};
function setPing(ping, server_id) {
if (serverId().val() == server_id) {
disableSpinner("reservation_ping");
$("#reservation_ping").val(ping);
};
};
function selectCurrentServer() {
$("#reservation_server_id").select2("val", $("#reservation_server_id").val());
pingCurrentServer();
};
function showSpinner(field) {
$("." + field + ' .fa-refresh').css('display', 'inline-block')
};
function hideSpinner(field) {
$("." + field + ' .fa-refresh').css('display', 'none')
};
function enableSpinner(field) {
$("." + field + ' .fa-refresh').addClass('fast-spin');
};
function disableSpinner(field) {
$("." + field + ' .fa-refresh').removeClass('fast-spin');
};
$("#reservation_enable_demos_tf").change(function(event) {
togglePluginsAndDemosTf($(event.currentTarget));
});
function togglePluginsAndDemosTf(target) {
if (target.prop("checked") == true) {
enablePlugins().prop("disabled", true);
enablePlugins().prop("checked", true);
} else {
if (canEnablePlugins == false) {
enablePlugins().prop("disabled", false);
enablePlugins().prop("checked", false);
} else {
enablePlugins().prop("disabled", false);
enablePlugins().prop("checked", true);
}
}
}
if (enableDemosTf().size > 0) {
togglePluginsAndDemosTf(enableDemosTf());
}
$("#reservation_starts_at").change(function() {
startDate = getDateFromDatePicker($(this));
endDate = getDateFromDatePicker($("#reservation_ends_at"));
if(endDate < startDate){
newDate = new Date(startDate.getTime() + 7200000);
$("#reservation_ends_at").datetimepicker("setUTCDate", newDate)
}
$("#reservation_ends_at").datetimepicker("setStartDate", $(this).val())
findFreeServers();
});
$("#reservation_ends_at").change(function() {
findFreeServers();
});
$("#reservation_server_id").change(function() {
clearPing();
pingCurrentServer();
});
$("#refresh-ping").click(function() {
pingCurrentServer();
});
$("#toggle_reservations_list").click(function() {
$("#toggle_reservations_list").hide();
$("#server_reservations_table").show();
});
$(".gantt").click(function(event) {
ele = $(event.currentTarget);
starts = ele.data('next-start');
ends = ele.data('next-end');
server_id = ele.data('server-id');
$('html, body').animate({
scrollTop: startsAt().offset().top
}, {
duration: 100,
complete: function() {
startsAt().val(starts);
endsAt().val(ends);
serverId().val(server_id);
updateStartsAt();
}
})
});
$(".server_name").click(function(event) {
ele = $(event.target);
server_id = ele.data('server-id');
$('html, body').animate({
scrollTop: startsAt().offset().top
}, {
duration: 100,
complete: function() {
serverId().val(server_id);
updateStartsAt();
}
})
});
function getDateFromDatePicker(element){
return $.fn.datetimepicker.DPGlobal.parseDate(
element.val(),
$.fn.datetimepicker.DPGlobal.parseFormat(datepicker_options.format, 'standard'),
"en",
'standard'
);
}
function updateStartsAt() {
startsAt().change();
};
function serverId() {
return $("#reservation_server_id");
};
function startsAt() {
return $("#reservation_starts_at");
};
function endsAt() {
return $("#reservation_ends_at");
};
function enablePlugins() {
return $("#reservation_enable_plugins");
};
function enableDemosTf() {
return $("#reservation_enable_demos_tf");
};
function loadServers() {
if (startsAt().length > 0) {
if ($("#reservation_starts_at:enabled").length > 0) {
findFreeServers();
} else {
selectCurrentServer();
};
};
};
loadServers();
$('.gantt').tooltip();
};
$(document).on('turbo:load', loadReservationPage);
$(document).on('turbo:render', loadReservationPage);