291 lines
19 KiB
Plaintext
291 lines
19 KiB
Plaintext
<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) %>" id="exit_shixun" class="shixun-task-btn task-btn-blue mt8 mr15">退出实训</a>
|
||
<% end %>
|
||
<% end %>
|
||
</div>
|
||
<script>
|
||
// 如果是HTML实训,则在效果显示栏实时渲染code
|
||
<% if @shixun.language == "Html" %>
|
||
setTimeout(tpi_html_show, 1000);
|
||
<% end %>
|
||
// 渲染用户的HTML的CODE。
|
||
function tpi_html_show(){
|
||
var contents = editor_CodeMirror.getValue();
|
||
$("#html_contents").attr("src", "/iframes/html_content?contents="+contents);
|
||
}
|
||
/* -------------- 点击加载上次通过的代码----------------*/
|
||
$("#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(){
|
||
if($("#next_step").attr("href") != "javascript:void(0);"){
|
||
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);
|
||
clearInterval(cm);
|
||
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);
|
||
$("#shixun_exp_<%=@game_challenge.id %>").html("经验值<span class='color-light-green mr5'>+"+ data.score + "</span>");
|
||
$("#shixun_grade_<%=@game_challenge.id %>").html("金币<span class='color-light-green mr5'>+"+ data.score + "</span>");
|
||
$("#shixun_tag_<%=@game_challenge.id %>").html("技能标签<span class='color-light-green mr5'>+"+ data.tag_count + "</span>");
|
||
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();
|
||
var span_class = parseInt(data.score) < 0 ? "u-color-light-red" : "color-light-green";
|
||
$("#shixun_exp_<%=@game_challenge.id %>").html("经验值<span class='color-light-green mr5'>+0</span>");
|
||
$("#shixun_grade_<%=@game_challenge.id %>").html("金币<span class='"+ span_class +" mr5'>"+ data.score + "</span>");
|
||
$("#shixun_tag_<%=@game_challenge.id %>").html("技能标签<span class='color-light-green mr5'>+0</span>");
|
||
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(){
|
||
console.log("错了");
|
||
}
|
||
})
|
||
|
||
}
|
||
|
||
/* ----------------- 评测 -------------------- */
|
||
function training_task_submmit(){
|
||
// 加载页面
|
||
nEvalContent = $("#evaluating_contents").hide();
|
||
nEvalInfo = $("#evaluating_info").hide();
|
||
nAjaxLoading = $("#evaluating_ajax_loading").css("display","flex").show().html("<embed src='/images/bigdata/loading2.svg' />");
|
||
nInfoAjaxLoading = $("#info_ajax_loading").css("display","flex").show().html("<embed src='/images/bigdata/loading2.svg' />");
|
||
// 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>");
|
||
if($("#next_step").length > 0){
|
||
$("#code_estimate").html("<a href='javascript:void(0);' class='task-btn mr15 mt8'>下一关</a>");
|
||
} else if($("#exit_shixun").length > 0){
|
||
$("#code_estimate").html("<a href='javascript:void(0);' class='task-btn mr15 mt8'>退出实训</a>");
|
||
}$(".blacktab_con").eq(1).trigger("click"); // 回到测试结果页面
|
||
// 保存版本库代码
|
||
var fileUpdateUrl = $("#current_repository_path").html();
|
||
$.ajax({
|
||
type: "POST",
|
||
url: fileUpdateUrl,
|
||
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){
|
||
if(data.language == "Html"){
|
||
tpi_html_show();
|
||
}
|
||
clearInterval(intId);
|
||
nEvalContent.show();
|
||
nEvalInfo.show();
|
||
nAjaxLoading.val("");
|
||
nInfoAjaxLoading.val("");
|
||
nAjaxLoading.hide();
|
||
nInfoAjaxLoading.hide();
|
||
// test_sets 公开测,hide_test_sets 隐藏测试集
|
||
code_evaluation(
|
||
eval('[' + data.test_sets + ']'),
|
||
data.had_test_count,
|
||
data.test_sets_count,
|
||
data.had_passed_testsests_error_count,
|
||
data.test_sets_hidden_count,
|
||
data.test_sets_public_count,
|
||
data.had_passed_testsests_hidden_count,
|
||
data.had_passed_testsests_public_count,
|
||
data.final_score,
|
||
data.latest_output,
|
||
data.language
|
||
);
|
||
$("#blacktab_nav_1").trigger("click");
|
||
if(data.status == 2){
|
||
clearInterval(cm);
|
||
clearInterval(intId);
|
||
var icon = $("#game_status_<%= @game_challenge.id %>"); // 实训列表的icon
|
||
$("#user_grade").html(parseInt($("#user_grade").html()) + parseInt(data.final_score));
|
||
console.log("############################################");
|
||
console.log(data.score);
|
||
console.log(data.tag_count);
|
||
console.log($("#shixun_exp_<%=@game_challenge.id %>")[0]);
|
||
$("#shixun_exp_<%=@game_challenge.id %>").html("经验值<span class='color-light-green mr5'>+"+ data.score + "</span>");
|
||
$("#shixun_grade_<%=@game_challenge.id %>").html("金币<span class='color-light-green mr5'>+"+ data.score + "</span>");
|
||
$("#shixun_tag_<%=@game_challenge.id %>").html("技能标签<span class='color-light-green mr5'>+"+ data.tag_count + "</span>");
|
||
icon.find("i").attr("class", "fa fa-unlock fr font-18 mt5 color-light-green w20_center");
|
||
icon.find("a:last").attr("title", "已完成");
|
||
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); // 恢复评测
|
||
var codeEstimate = $("#code_estimate").children("a").html();
|
||
if(codeEstimate == undefined){
|
||
return;
|
||
}else if(codeEstimate.trim() == "下一关"){
|
||
$("#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(codeEstimate.trim() == "退出实训"){
|
||
$("#code_estimate").html("<a href='<%= shixun_path(@shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
|
||
}
|
||
}
|
||
// 访问60次,即120s后后台还未改变状态即执行
|
||
if(i == 60){
|
||
if(data.language == "Html"){
|
||
tpi_html_show();
|
||
}
|
||
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'){
|
||
clearInterval(intId);
|
||
nEvalContent.show();
|
||
nEvalInfo.show();
|
||
nAjaxLoading.val("");
|
||
nInfoAjaxLoading.val("");
|
||
nAjaxLoading.hide();
|
||
nInfoAjaxLoading.hide();
|
||
ajaxTimeoutTest.abort();
|
||
clearInterval(intId);
|
||
}}
|
||
});
|
||
}, 2000);
|
||
}
|
||
|
||
});
|
||
}
|
||
}
|
||
});
|
||
}
|
||
</script> |