完成跳关打实训
This commit is contained in:
parent
61f2749d1b
commit
328e7236a9
|
|
@ -359,7 +359,9 @@ class GamesController < ApplicationController
|
|||
|
||||
# 自动推送下一个任务
|
||||
def next_step
|
||||
render_403 if @game.status != 2
|
||||
unless show_next_stage?(@game, @myshixun.shixun.try(:status))
|
||||
render_403
|
||||
end
|
||||
next_game = @game.next_game
|
||||
next_game.update_attributes(:status => 0, :open_time => Time.now) if next_game.status == 3
|
||||
respond_to do |format|
|
||||
|
|
|
|||
|
|
@ -33,6 +33,18 @@ module ApplicationHelper
|
|||
extend Forwardable
|
||||
def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter
|
||||
|
||||
# 定义当前关卡是否有权开启下一关
|
||||
# :实训若发布了,必须通过当前关卡才能查看下一关
|
||||
# :未发布的实训,除了最后一关,其它的关卡都可以进入下一关
|
||||
def show_next_stage?(game, shixun_status)
|
||||
if game.is_final_game? || ([2,3].include?(shixun_status.to_i) && game.try(:statu) != 2)
|
||||
false
|
||||
else
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# 适用与已经用url_safe编码后,回调字符串形式
|
||||
def tran_base64_decode64 str
|
||||
if str.blank?
|
||||
|
|
|
|||
|
|
@ -52,4 +52,9 @@ class Game < ActiveRecord::Base
|
|||
output = outputs.blank? ? nil : outputs.first
|
||||
return output
|
||||
end
|
||||
|
||||
def is_final_game?
|
||||
challenge = self.challenge
|
||||
challenge.try(:position).to_i == challenge.shixun.challenges.count ? true : false
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -14,23 +14,20 @@
|
|||
<div id="code_estimate">
|
||||
<% if @game.status == 1 %>
|
||||
<a class="shixun-task-btn mt8 mr15" id="code_testing">评测中..</a>
|
||||
<% elsif @game.status == 2 %>
|
||||
<% end %>
|
||||
<% if show_next_stage?(@game, @myshixun.shixun.try(:status)) %>
|
||||
<% 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 %>
|
||||
<%= 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>
|
||||
<a href="<%= shixun_path(@myshixun.shixun) %>" id="exit_shixun" class="shixun-task-btn task-btn-blue mt8 mr15">退出实训</a>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
<script>
|
||||
// 如果是HTML实训,则在效果显示栏实时渲染code
|
||||
<% if @shixun.language == "Html" %>
|
||||
<% if @myshixun.shixun.try(:language) == "Html" %>
|
||||
setTimeout(tpi_html_show, 1000);
|
||||
<% end %>
|
||||
// 渲染用户的HTML的CODE。
|
||||
|
|
@ -117,7 +114,7 @@
|
|||
$("#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>");
|
||||
$("#code_estimate").html("<a href='<%= shixun_path(@myshixun.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}) %>";
|
||||
}
|
||||
// 传递具体屏幕的宽高,实现不同浏览器与不同分辨率都能撑满屏幕
|
||||
|
|
@ -131,7 +128,7 @@
|
|||
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>");
|
||||
$("#code_estimate").html("<a href='<%= shixun_path(@myshixun.shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -232,7 +229,7 @@
|
|||
$("#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>");
|
||||
$("#code_estimate").html("<a href='<%= shixun_path(@myshixun.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}) %>";
|
||||
}
|
||||
// 传递具体屏幕的宽高,实现不同浏览器与不同分辨率都能撑满屏幕
|
||||
|
|
@ -247,7 +244,7 @@
|
|||
}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>");
|
||||
$("#code_estimate").html("<a href='<%= shixun_path(@myshixun.shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
|
||||
}
|
||||
}
|
||||
// 访问60次,即120s后后台还未改变状态即执行
|
||||
|
|
|
|||
|
|
@ -18,113 +18,10 @@
|
|||
</ul>
|
||||
<div class="cl"></div>
|
||||
<div id="game_test_set_results" class="-flex -relative blacktab-inner"></div>
|
||||
<script id="t:exec_results_1" type="text/html">
|
||||
<div id="blacktab_con_1" class="" >
|
||||
|
||||
<! if(language == "Html") { !>
|
||||
<div class="fit -scroll">
|
||||
<div class="-layout-v -fit">
|
||||
<div class="-flex -scroll task-padding16 loading-center undis" id="html_ajax_loading"></div>
|
||||
<div class="-flex -scroll task-padding16" id="html_contents" style="background: #fff">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<! } !>
|
||||
</div>
|
||||
<div id="blacktab_con_2" class="<!= language == 'Html' ? 'undis' : '' !>" >
|
||||
<div class="fit -scroll">
|
||||
<div class="-layout-v -fit">
|
||||
<div class="-flex -scroll task-padding16 loading-center undis" id="evaluating_ajax_loading">
|
||||
<embed src='/images/bigdata/loading2.svg' />
|
||||
</div>
|
||||
<div class="-flex -scroll task-padding16" id="evaluating_contents">
|
||||
<! if(had_test_count != "0") { !>
|
||||
<! if(had_passed_testsests_error_count != "0") { !>
|
||||
<p class="-text-danger mb10">
|
||||
<i class="fa fa-exclamation-circle font-16" ></i><span class="ml5 mr5 -text-danger"><!= had_passed_testsests_error_count !>/<!= test_sets_count !></span> <!= latest_output !>
|
||||
</p>
|
||||
<! }else{ !>
|
||||
<p class="color-light-green mb10">
|
||||
<i class="fa fa-check-circle font-16" ></i><span class="ml5 mr5"><!= test_sets_count !>/<!= test_sets_count !></span> 全部通过
|
||||
</p>
|
||||
<! } !>
|
||||
<! } !>
|
||||
<! for(var i = 0; i < test_sets.length; i++ ) { !>
|
||||
<div class="-task-ces-box mb15 clearfix">
|
||||
<div class="-task-ces-top" onclick="toggle_test_case('<!= test_sets[i].is_public !>', '<!= i !>')" style="cursor:pointer">
|
||||
<i class="fa fa-caret-right mr5 font-16" ></i>
|
||||
<span class="font-14">测试集 <!= i + 1 !></span>
|
||||
<! if( test_sets[i].result == 0 ) { !>
|
||||
<i class="fa fa-exclamation-circle -text-danger fr mt8 ml5" ></i>
|
||||
<! } !>
|
||||
<! if( test_sets[i].result == 1 ) { !>
|
||||
<i class="fa fa-check-circle color-light-green fr mt8 ml5 font-16" ></i>
|
||||
<! } !>
|
||||
<! if(test_sets[i].is_public == 0) { !>
|
||||
<i class="fa fa-lock fr mt8" ></i>
|
||||
<! } !>
|
||||
</div>
|
||||
<! if(test_sets[i].is_public == 1) { !>
|
||||
<div class="-task-ces-info undis" id="test_case_<!= i !>">
|
||||
<ul class="font-14">
|
||||
<li class="clearfix"><div class="clearfix"><span class="-task-ces-info-left color-blue fl fb">测试输入:</span><p class="fl" style="width: 90%;"><!= test_sets[i].input == null ? "空" : test_sets[i].input.replace(/\r\n/g,"<br>") !></p></div></li>
|
||||
<li class="clearfix"><div class="clearfix"><span class="-task-ces-info-left color-blue fl fb">预期输出:</span><p class="fl" style="width: 90%;"><!= test_sets[i].output == null ? "空" : test_sets[i].output.replace(/\r\n/g,"<br>") !></p></div></li>
|
||||
<li class="clearfix"><div class="clearfix"><span class="-task-ces-info-left color-blue fl fb">实际输出:</span><p class="fl color-orange" style="width: 90%;"><!= test_sets[i].actual_output == null ? "空" : test_sets[i].actual_output.replace(/\r\n/g,"<br>") !></p></div></li>
|
||||
</ul>
|
||||
</div>
|
||||
<! } !>
|
||||
<! if(test_sets[i].is_public == 0) { !>
|
||||
<div class="-task-ces-info undis" id="test_case_<!= i !>">
|
||||
<ul class="font-14">
|
||||
<li class="clearfix"><div class="clearfix"><p class="fl color-orange" style="width: 90%;margin-left: 34px;">此为隐藏测试项,暂不支持查看</p></div></li>
|
||||
</ul>
|
||||
</div>
|
||||
<! } !>
|
||||
</div>
|
||||
<! } !>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="blacktab_con_3" class="undis" >
|
||||
<div class="fit -scroll">
|
||||
<div class="-layout-v -fit">
|
||||
<div class="-flex -scroll task-padding16 loading-center undis" id="info_ajax_loading">
|
||||
<embed src='/images/bigdata/loading2.svg' />
|
||||
</div>
|
||||
<div class="-flex -scroll task-padding16" id="evaluating_info">
|
||||
<! if(had_test_count != "0") { !>
|
||||
<! if(had_passed_testsests_error_count != "0") { !>
|
||||
<p class="-text-danger mb10">
|
||||
<i class="fa fa-exclamation-circle font-16" ></i><span class="ml5 mr5 -text-danger"><!= had_passed_testsests_error_count !>/<!= test_sets_count !></span> <!= latest_output !>
|
||||
</p>
|
||||
<! }else{ !>
|
||||
<p class="color-light-green mb10">
|
||||
<i class="fa fa-check-circle font-16 " ></i><span class="ml5 mr5"><!= test_sets_count !>/<!= test_sets_count !></span> 全部通过
|
||||
</p>
|
||||
<! } !>
|
||||
<! } !>
|
||||
<div class="-task-ces-box mb10 clearfix">
|
||||
<div class="-task-ces-info">
|
||||
<ul>
|
||||
<li><span class="-task-ces-info-left ">公开测试:</span><span class="color-light-green"><!= had_passed_testsests_public_count !>/<!= test_sets_public_count !></span></li>
|
||||
<li><span class="-task-ces-info-left">隐藏测试:</span><span class="color-light-green"><!= had_passed_testsests_hidden_count !>/<!= test_sets_hidden_count !></span></li>
|
||||
<li><span class="-task-ces-info-left">经验值:</span><span class="color-light-green" id="experience_value">+ <!= final_score !></span></li>
|
||||
<li><span class="-task-ces-info-left">金币:</span><span class="color-light-green" id="grade_value">+ <!= final_score !></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// test_sets:测试集;had_test_count:输出集的个数;test_sets_count:测试集的个数;had_passed_testsests_error_count:测试集报错数;test_sets_hidden_count:隐藏测试集的个数
|
||||
// test_sets_public_count:公开测试集的个人;had_passed_testsests_hidden_count:通过的隐藏集个数;had_passed_testsests_public_count:通过的公开测试集个数
|
||||
// final_score:最终得分;had_done:通过的是否是最后一关;latest_output:最新的输出;language:实训的语言
|
||||
<%# test_sets:测试集;had_test_count:输出集的个数;test_sets_count:测试集的个数;had_passed_testsests_error_count:测试集报错数;test_sets_hidden_count:隐藏测试集的个数 %>
|
||||
<%# test_sets_public_count:公开测试集的个人;had_passed_testsests_hidden_count:通过的隐藏集个数;had_passed_testsests_public_count:通过的公开测试集个数 %>
|
||||
<%# final_score:最终得分;had_done:通过的是否是最后一关;latest_output:最新的输出;language:实训的语言 %>
|
||||
$(function(){
|
||||
code_evaluation(
|
||||
[<%= @test_sets.html_safe unless @test_sets.blank? %>],
|
||||
|
|
@ -142,34 +39,6 @@
|
|||
$("#blacktab_nav_1").trigger("click");
|
||||
});
|
||||
|
||||
|
||||
/* var bt = baidu.template;
|
||||
bt.LEFT_DELIMITER = '<!';
|
||||
bt.RIGHT_DELIMITER = '!>';
|
||||
bt.ESCAPE = false;
|
||||
$(function(){
|
||||
// console.log("<%#= @public_test_sets.join(',').html_safe %>");
|
||||
var html = bt('t:exec_results_1',{
|
||||
test_sets: [<%#= @test_sets.html_safe unless @test_sets.blank? %>],
|
||||
// hide_test_sets: [<%#= @private_test_sets.html_safe unless @private_test_sets.blank? %>]
|
||||
had_test_count: '<%#= @had_test_count %>',
|
||||
test_sets_count: '<%#= @test_sets_count %>',
|
||||
had_passed_testsests_error_count: '<%#= @had_passed_testsests_error_count %>',
|
||||
test_sets_hidden_count : '<%#= @test_sets_hidden_count %>',
|
||||
test_sets_public_count: '<%#= @test_sets_public_count %>',
|
||||
had_passed_testsests_hidden_count: '<%#= @had_passed_testsests_hidden_count %>',
|
||||
had_passed_testsests_public_count: '<%#= @had_passed_testsests_public_count %>',
|
||||
final_score: '<%#= @final_score %>',
|
||||
had_done: '<%#= @had_done %>',
|
||||
latest_output: [<%#= @latest_output.html_safe unless @latest_output.blank? %>],
|
||||
language: '<%#= @language %>'
|
||||
}
|
||||
);
|
||||
$("#game_test_set_results").html(html);
|
||||
$("#blacktab_nav_1").trigger("click");
|
||||
});*/
|
||||
|
||||
|
||||
function g_new(o){return document.getElementById(o);}
|
||||
function HoverLi(n){
|
||||
for(var i=1;i<=3;i++){
|
||||
|
|
@ -179,10 +48,4 @@
|
|||
g_new('blacktab_con_'+n).className='dis';
|
||||
g_new('blacktab_nav_'+n).className='blacktab_hover';
|
||||
}
|
||||
|
||||
/*allClassName---------------同一块tab共有的类名(同时对应的显示块ID要等于类名加上"_"在加上块的位置)
|
||||
* addClassName---------------点击tab需要添加的样式类
|
||||
* item-----------------------点击的当前tab元素
|
||||
* */
|
||||
|
||||
</script>
|
||||
Loading…
Reference in New Issue