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

272 lines
16 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>
<% if @st == 0 %>
<div id="reset_code_to_bengin" class="<%= @game.status == 2 ? "" : "undis" %>">
<a href="javascript:void(0)" class="shixun-task-btn task-btn-green mr15 mt8" onclick="delete_confirm_box('<%= reset_new_code_myshixun_game_path(@game, :myshixun_id => @myshixun, :path => @path) %>', '你在本关中修改的内容将丢失<br />是否确定重新加载上次通过的代码');">加载上次通过的代码</a>
</div>
<% end %>
<div id="code_test">
<% if @st == 0 %>
<a href="javascript:void(0)" class="shixun-task-btn task-btn-blue mr15 mt8" onclick="training_task_submmit();">评测</a>
<% elsif @game.status != 2 %>
<a href="javascript:void(0)" class="shixun-task-btn task-btn-blue mr15 mt8" onclick="choice_submmit();">评测</a>
<% end %>
</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="<%= shixun_path(@shixun) %>" class="shixun-task-btn task-btn-blue mt8 mr15">退出实训</a>
<% end %>
<% end %>
</div>
<script>
// 如果是HTML实训则在效果显示栏渲染code
<% if @shixun.language == "Html" %>
var hVal = setInterval(tpi_html_show, 1000);
<% end %>
// 渲染用户的HTML的CODE。
function tpi_html_show(){
$.ajax({
url: "<%= html_content_iframes_path %>",
type: "POST",
dataType: 'script',
data: {contents: editor_CodeMirror.getValue()}
});
}
/* -------------- 点击加载上次通过的代码----------------*/
$("#task_popup_confirm").live("click", function(){
$("#coding_area").hide();
$("#coding_ajax_loading").css("display", "flex");
});
/* ------------------耗时------------------------- */
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 * 24) % (1000 * 60 * 60))/ (1000 * 60));
var seconds = parseInt((time % (1000 * 60 * 60 * 24) % (1000 * 60 * 60)) % (1000 * 60) / 1000);
$("#time-consuming").html("耗时:" + days + " 天 " + hours + " 小时 " + minutes + " 分钟 " + seconds + " 秒 ");
}
/* -----------------下一关增加loading效果--------------------- */
$("#next_step").live("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);
});
// 选择题提交评测
// answer 选择的答案
function choice_submmit(){
var answer = "";
var nBtn = $(".card-check");
var choice = nBtn.find("input[name='answer']");
for(var i = 0; i < choice.length; i++){
answer += $(choice[i]).val();
}
if(answer == ""){
notice_sure_box("答案不能为空!");
return;
}
$("#code_test").html("<a class='task-btn mt8 mr15'>评测中..</a>");
$.ajax({
type: "post",
url: '<%= evaluating_choice_myshixun_game_path(@game, :myshixun_id => @myshixun) %>',
data: {answer: answer},
dataType: "json",
success: function(data){
console.log(data);
var icon = $("#game_status_<%= @game_challenge.id %>"); // 实训列表的icon
icon.find("i").attr("class", "fa fa-unlock fr font-18 mt5 color-light-green w20_center");
icon.find("a:last").attr("title", "已完成");
$("#code_test").remove();
if(data.correct){
$("#correct_tip").show();
$("#user_grade").html(data.grade);
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='next_step' 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='<%= shixun_path(@shixun) %>' 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);
}else{
$("#error_tip").show();
if(0 == data.had_done){
$("#code_estimate").html("<a href='<%= next_step_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' class='task-btn task-btn-blue mr15 mt8' id='next_step' data-remote='true'>下一关</a>");
}else if(1 == data.had_done ){
$("#code_estimate").html("<a href='<%= shixun_path(@shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
}
}
},
error: function(){
alert("错了");
}
})
}
/* ----------------- 评测 -------------------- */
function training_task_submmit(){
// 加载页面
nEvalContent = $("#evaluating_contents");
nEvalInfo = $("#evaluating_info");
nHtmlContent = $("#html_contents");
nAjaxLoading = $("#evaluating_ajax_loading");
nHtmlAjaxLoading = $("#html_ajax_loading");
nInfoAjaxLoading = $("#info_ajax_loading");
nAjaxLoading.css("display","flex");
nInfoAjaxLoading.css("display","flex");
nHtmlAjaxLoading.css("display","flex");
nEvalContent.hide();
nEvalInfo.hide();
nHtmlContent.hide();
nAjaxLoading.show();
nInfoAjaxLoading.show();
nHtmlAjaxLoading.show();
nAjaxLoading.html("<embed src='/images/bigdata/loading2.svg' />");
nInfoAjaxLoading.html("<embed src='/images/bigdata/loading2.svg' />");
nHtmlAjaxLoading.html("<embed src='/images/bigdata/loading2.svg' />");
$("#code_test").html("<a class='task-btn mt8 mr15'>评测中..</a>");
clearInterval(hVal);
// 保存版本库代码
$.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){
hVal = setInterval(tpi_html_show, 1000);
clearInterval(intId);
nEvalContent.show();
nEvalInfo.show();
nHtmlContent.show();
nAjaxLoading.val("");
nInfoAjaxLoading.val("");
nAjaxLoading.hide();
nInfoAjaxLoading.hide();
nHtmlAjaxLoading.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,
language: data.language
});
$("#game_test_set_results").html(html);
$("#blacktab_nav_1").trigger("click"); // 回到测试结果页面
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='next_step' 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='<%= shixun_path(@shixun) %>' 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);
$("#reset_code_to_bengin").show(); // 显示加载上次通过的代码
}
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){
hVal = setInterval(tpi_html_show, 1000);
clearInterval(intId);
nEvalContent.show();
nEvalInfo.show();
nHtmlContent.show();
nAjaxLoading.val("");
nInfoAjaxLoading.val("");
nAjaxLoading.hide();
nInfoAjaxLoading.hide();
nHtmlAjaxLoading.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'){
hVal = setInterval(tpi_html_show, 1000);
clearInterval(intId);
nEvalContent.show();
nHtmlContent.show();
nEvalInfo.show();
nAjaxLoading.val("");
nInfoAjaxLoading.val("");
nAjaxLoading.hide();
nInfoAjaxLoading.hide();
nHtmlAjaxLoading.hide();
ajaxTimeoutTest.abort();
clearInterval(intId);
}}
});
}, 2000);
}
});
}
}
});
}
</script>