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

310 lines
22 KiB
Plaintext
Raw Permalink 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>
<!--<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>