educoder/app/views/games/_code_actions.html.erb

163 lines
9.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<span class="mt10 -flex c_grey ml15" id="time-consuming"></span>
<div id="code_test">
<a href="javascript:void(0)" class="shixun-task-btn task-btn-blue mr15 mt8" onclick="training_task_submmit();">评测</a>
</div>
<div id="code_estimate">
<% if @game.status == 1 %>
<a class="shixun-task-btn mt8 mr15" id="code_testing">评测中..</a>
<% elsif @game.status == 2 %>
<% if @had_done == 0 %>
<%= link_to "下一关 ", {:controller => 'games',
:action => "next_step", :id => @game,
:myshixun_id => @myshixun},
:class => "shixun-task-btn task-btn-blue mr15 mt8",
:id => "next_step",
:remote => true %>
<!--<a href="javascript:void(0);" onclick="shixun_next_step();" class="task-btn task-btn-blue mr15 mt8">下 一 步</a>-->
<% else %>
<a href="<%= shixuns_path() %>" class="shixun-task-btn task-btn-blue mt8 mr15">退出实训</a>
<% end %>
<% end %>
</div>
<script>
/* ------------------耗时------------------------- */
var cTime = 1; // 时间累加参数
var cm = setInterval(setTime, 1000);
function setTime(){
var startTime = 0; // 开始时间 - 毫秒
var endTime = 0; // 结束时间
var consumeTime = 0; // 耗时
<% if @game.status == 2 %>
startTime = (new Date("<%= consume_time(@game.open_time) %>")).getTime();
endTime = (new Date("<%= consume_time(@game.end_time) %>")).getTime();
consumeTime = parseInt(endTime - startTime);
<% else %>
startTime = (new Date("<%= consume_time(@game.open_time) %>")).getTime();
endTime = (new Date("<%= consume_time(Time.now) %>")).getTime();
consumeTime = parseInt(endTime - startTime) + cTime * 1000;
cTime++;
<% end %>
formatDuring(consumeTime);
}
function formatDuring(time){
var days = parseInt(time / (1000 * 60 * 60 * 24));
var hours = parseInt((time % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = parseInt((time % (1000 * 60 * 60)) / (1000 * 60));
var seconds = parseInt((time % (1000 * 60)) / 1000);
$("#time-consuming").html("耗时:" + days + " 天 " + hours + " 小时 " + minutes + " 分钟 " + seconds + " 秒 ");
}
/* -----------------下一关--------------------- */
$("#next_step").on("click", function(){
nNext = $("#code_estimate");
html = "<a href='javascript:void(0);' class='task-btn mr15 mt8'>下一关<img src='/images/bigdata/loading2.svg' style='width:25px;float:left;margin-top: 3px' /></a>";
nNext.html(html);
});
/* ----------------- 评测 -------------------- */
function training_task_submmit(){
// 加载页面
nEvalContent = $("#evaluating_contents");
nEvalInfo = $("#evaluating_info");
nAjaxLoading = $("#evaluating_ajax_loading");
nInfoAjaxLoading = $("#info_ajax_loading");
nAjaxLoading.css("display","flex");
nInfoAjaxLoading.css("display","flex");
nEvalContent.hide();
nEvalInfo.hide();
nAjaxLoading.show();
nInfoAjaxLoading.show();
nAjaxLoading.html("<embed src='/images/bigdata/loading2.svg' />");
nInfoAjaxLoading.html("<embed src='/images/bigdata/loading2.svg' />");
$("#code_test").html("<a class='task-btn mt8 mr15'>评测中..</a>");
// 保存版本库代码
$.ajax({
type: "POST",
url: '<%= file_update_myshixun_game_path(@game, :myshixun_id => @myshixun, :path => @path) %>',
data:{ content: $('#challenge-answer-edit-small').val()},
success: function(data){
if(data.success == "success"){
var i = 0; // i变量用来统计setInterval执行了多少次便于统计访问时间
// 建立job
$.ajax({
url: '<%= game_build_myshixun_game_path(@game, :myshixun_id => @myshixun) %>',
success: function (data){
// 每2s匹配一次状态成功2 评测中1 评测 0
var intId = setInterval(function(){
var ajaxTimeoutTest = $.ajax({
url: '<%= game_status_myshixun_game_path(@game, :myshixun_id => @myshixun) %>',
timeout : 50000,
async: false,
data:{"resubmit":data.resubmit},
success:function(data){
// 如果查到了,就退出
i = i + 1;
console.log(i);
if(data.status == 2 || data.status == 0){
clearInterval(intId);
nEvalContent.show();
nEvalInfo.show();
nAjaxLoading.val("");
nInfoAjaxLoading.val("");
nAjaxLoading.hide();
nInfoAjaxLoading.hide();
// test_sets 公开测hide_test_sets 隐藏测试集
var html = bt('t:exec_results_1',{
"test_sets": eval('[' + data.test_sets + ']'),
had_test_count: data.had_test_count,
test_sets_count: data.test_sets_count,
had_passed_testsests_error_count: data.had_passed_testsests_error_count,
test_sets_hidden_count: data.test_sets_hidden_count,
test_sets_public_count: data.test_sets_public_count,
had_passed_testsests_hidden_count: data.had_passed_testsests_hidden_count,
had_passed_testsests_public_count: data.had_passed_testsests_public_count,
final_score: data.final_score,
latest_output: data.latest_output
});
$("#game_test_set_results").html(html);
if(data.status == 2){
clearInterval(cm);
clearInterval(intId);
if( data.had_done == 0 ) {
$("#code_estimate").html("<a href='<%= next_step_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' class='task-btn task-btn-blue mr15 mt8' id='code_test' data-remote='true'>下一关</a>");
var htmlvalue = "<%= j (render :partial => 'games/pass_game_show', :locals => { :game=> @game, :myshixun => @myshixun, :had_done => 0}) %>";
}else{
$("#code_estimate").html("<a href='<%= shixuns_path() %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
var htmlvalue = "<%= j (render :partial => 'games/pass_game_show', :locals => { :game=> @game, :myshixun => @myshixun, :had_done => 1}) %>";
}
// 传递具体屏幕的宽高,实现不同浏览器与不同分辨率都能撑满屏幕
pop_box_new2(htmlvalue, window.innerWidth, window.innerHeight);
}
var html = "<a href='javascript:void(0)' class='task-btn task-btn-blue mr15 mt8' onclick='training_task_submmit();'>评测</a>";
$("#code_test").html(html);
}
// 访问60次即120s后后台还未改变状态即执行
if(i == 60){
clearInterval(intId);
nEvalContent.show();
nEvalInfo.show();
nAjaxLoading.val("");
nInfoAjaxLoading.val("");
nAjaxLoading.hide();
nInfoAjaxLoading.hide();
var html = "<a href='javascript:void(0)' class='task-btn task-btn-blue mr15 mt8' onclick='training_task_submmit();'>评测</a>";
var html_1 = "实训云平台繁忙繁忙等级88";
$("#code_test").html(html);
notice_box(html_1);
}
},
complete: function(XMLHttpRequest,status){if(status=='timeout'){
ajaxTimeoutTest.abort();
clearInterval(intId);
}}
});
}, 2000);
}
});
}
}
});
}
</script>