310 lines
22 KiB
Plaintext
310 lines
22 KiB
Plaintext
<span class="mt10 -flex c_grey ml15" id="time-consuming"></span>
|
||
<!--<span class="mt10 mr15" style="color: #2dad96;" id="game_wating_time"></span>-->
|
||
<% if @myshixun.shixun.try(:language) == "PHP/Web" %>
|
||
<div id="php_display" class="undis">
|
||
<a href="<%= Redmine::Configuration['tomcat_php'] + ':' + (50000 + @game.myshixun_id).to_s + '/' + @game.challenge.path.strip %>" target="_blank" class="shixun-task-btn task-btn-orange mr15 mt8">
|
||
查看网页效果
|
||
</a>
|
||
<!--
|
||
<a href="<%#= "http://106.75.96.108:" + (50000+4111).to_s + '/' + "src/step1/Helloworld.php" %>" target="_blank" class="shixun-task-btn task-btn-orange mr15 mt8">查看网页效果</a>
|
||
-->
|
||
</div>
|
||
<% end %>
|
||
<% 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="prev_step_area">
|
||
<% if @game.challenge.position > 1 %>
|
||
<%= link_to "上一关 ", {:controller => 'games', :action => "prev_step", :id => @game, :myshixun_id => @myshixun},
|
||
:class => "shixun-task-btn task-btn-orange mr15 mt8", :id => "prev_step", :remote => true %>
|
||
<% end %>
|
||
</div>
|
||
<div id="code_test">
|
||
<% if @st == 0 %>
|
||
<a href="javascript:void(0)" class="shixun-task-btn task-btn-orange mr15 mt8" onclick="training_task_submmit();">评测</a>
|
||
<% else %>
|
||
<a href="javascript:void(0)" class="shixun-task-btn task-btn-orange 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>
|
||
<% end %>
|
||
<% if @had_done == 0 %>
|
||
<% if show_next_stage?(@game, @myshixun.shixun.try(:status)) %>
|
||
<%= link_to "下一关 ", {:controller => 'games', :action => "next_step", :id => @game, :myshixun_id => @myshixun},
|
||
:class => "shixun-task-btn task-btn-orange mr15 mt8", :id => "next_step", :remote => true %>
|
||
<!--<a href="javascript:void(0);" onclick="shixun_next_step();" class="task-btn task-btn-orange mr15 mt8">下 一 步</a>-->
|
||
<% end %>
|
||
<% else %>
|
||
<a href="<%= shixun_path(@myshixun.shixun) %>" id="exit_shixun" class="shixun-task-btn task-btn-orange mt8 mr15">离开</a>
|
||
<% end %>
|
||
</div>
|
||
<script>
|
||
// 如果是HTML实训,则在效果显示栏实时渲染code
|
||
<% if @myshixun.shixun.try(:language) == "Html" %>
|
||
setTimeout(tpi_html_show, 1000);
|
||
<% end %>
|
||
// 渲染用户的HTML的CODE。
|
||
function tpi_html_show(){
|
||
$($(".blacktab_con")[0]).trigger("click");
|
||
var contents = editor_CodeMirror.getValue();
|
||
$("#data_param").val(contents);
|
||
$("#html_form").attr("action", "/iframes/html_content");
|
||
$("#html_form").submit();
|
||
}
|
||
/* -------------- 点击加载上次通过的代码----------------*/
|
||
$("#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 + " 秒 ");
|
||
}
|
||
|
||
// 选择题提交评测
|
||
// answer 选择的答案
|
||
function choice_submmit(){
|
||
var user_answer = [];
|
||
var input_answer = $("input[name='user_answer']");
|
||
var lens = input_answer.length;
|
||
for(i = 0; i < lens; i++ ){
|
||
var answer = $(input_answer[i]).val();
|
||
if(answer == ""){
|
||
notice_sure_box("第"+ (i+1) + "题未答,请确认!");
|
||
return;
|
||
}
|
||
user_answer.push(answer)
|
||
}
|
||
console.log(user_answer);
|
||
$("#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:user_answer},
|
||
dataType: "script",
|
||
success: function(data){
|
||
},
|
||
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><a href='javascript:void(0);' class='task-btn mr15 mt8'>离开</a>");
|
||
}
|
||
if($("#prev_step").length > 0){
|
||
$("#prev_step_area").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){
|
||
/* timeID = setInterval(function(){
|
||
$.ajax({
|
||
url: '<%#= get_waiting_time_myshixun_game_path(@game, :myshixun_id => @myshixun) %>',
|
||
data:{resubmit:data.resubmit},
|
||
async: false,
|
||
success: function(data){
|
||
console.log(data);
|
||
if(data.onRun == 1){
|
||
clearInterval(timeID);
|
||
$("#game_wating_time").html("");*/
|
||
// 每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();
|
||
}else if(data.language == "PHP/Web"){
|
||
$("#php_display").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.gold,
|
||
data.latest_output,
|
||
data.language,
|
||
data.compile_success
|
||
);
|
||
if(data.status == 2){
|
||
if(data.language == "Html"){
|
||
tpi_html_show();
|
||
}
|
||
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.final_score + "</span>");
|
||
$("#shixun_grade_<%=@game_challenge.id %>").html("金币<span class='"+ (data.gold < 0 ? "u-color-light-red" : "color-light-green") +" mr5'>"+ (data.gold < 0 ? data.gold : ("+" + data.gold)) + "</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-orange mr15 mt8' id='next_step' data-remote='true'>下一关</a><a href='<%= shixun_path(@myshixun.shixun) %>' class='task-btn task-btn-orange mt8 mr15' >离开</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(@myshixun.shixun) %>' class='task-btn task-btn-orange 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-orange mr15 mt8' onclick='training_task_submmit();'>评测</a>";
|
||
$("#code_test").html(html); // 恢复评测
|
||
if(data.position > 1){
|
||
$("#prev_step_area").html("<a href='<%= prev_step_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' class='task-btn task-btn-orange mr15 mt8' id='prev_step' data-remote='true'>上一关</a>")
|
||
}
|
||
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-orange mr15 mt8' id='next_step' data-remote='true'>下一关</a><a href='<%= shixun_path(@myshixun.shixun) %>' class='task-btn task-btn-orange mt8 mr15' >离开</a>");
|
||
} else if(codeEstimate.trim() == "离开"){
|
||
$("#code_estimate").html("<a href='<%= shixun_path(@myshixun.shixun) %>' class='task-btn task-btn-orange 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();
|
||
if(data.position > 1){
|
||
$("#prev_step_area").html("<a href='<%= prev_step_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' class='task-btn task-btn-orange mr15 mt8' id='prev_step' data-remote='true'>上一关</a>")
|
||
}
|
||
if( data.had_done == 0 ) {
|
||
$("#code_estimate").html("<a href='<%= next_step_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' class='task-btn task-btn-orange mr15 mt8' id='next_step' data-remote='true'>下一关</a><a href='<%= shixun_path(@myshixun.shixun) %>' class='task-btn task-btn-orange mt8 mr15' >离开</a>");
|
||
}
|
||
var html = "<a href='javascript:void(0)' class='task-btn task-btn-orange 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();
|
||
}}
|
||
});
|
||
}, 2000);
|
||
/*}else if(data.onRun == 0){
|
||
mintes = parseInt(data.waitingTime / 60);
|
||
if(mintes > 1){
|
||
$("#game_wating_time").html("目前正有" + data.waitNum + "个任务正在等待,大约需要等待" + mintes + "分钟")
|
||
}else{
|
||
$("#game_wating_time").html("目前正有" + data.waitNum + "个任务正在等待,大约需要等待" + data.waitingTime + "秒")
|
||
}
|
||
}
|
||
}
|
||
})
|
||
}, 2000);*/
|
||
}
|
||
|
||
});
|
||
|
||
|
||
|
||
}
|
||
}
|
||
});
|
||
}
|
||
</script> |