Merge branch 'dev_huang' into develop
This commit is contained in:
commit
aa080318ee
|
|
@ -3,7 +3,7 @@ class GamesController < ApplicationController
|
|||
layout "base_myshixun"
|
||||
skip_before_filter :verify_authenticity_token, :only => [:file_update]
|
||||
before_filter :find_myshixun, :only => [:index]
|
||||
before_filter :find_game, :only => [:show, :game_build, :entry,:next_step, :outputs_show, :file_edit, :file_update, :game_status, :change_status, :answer]
|
||||
before_filter :find_game, :only => [:show, :game_build, :entry,:next_step, :outputs_show, :file_edit, :file_update, :game_status, :change_status, :answer, :minus_score]
|
||||
before_filter :find_repository, :only => [:show, :entry, :file_edit, :file_update]
|
||||
before_filter :allowd_manager
|
||||
before_filter :allowd_view, :only => [:show]
|
||||
|
|
@ -69,23 +69,19 @@ class GamesController < ApplicationController
|
|||
@test_sets = test_set_static_data(test_sets)
|
||||
end
|
||||
|
||||
@consume_time = (@game.status == 2 ? game_spend_time(@game.open_time, @game.updated_at) : game_spend_time(@game.open_time, Time.now))
|
||||
logger.info("#################################{@public_test_sets}")
|
||||
@test_sets_count = test_sets.count
|
||||
@test_sets_hidden_count = test_sets.where(:is_public => false).count
|
||||
@test_sets_hidden_count = test_sets.blank? ? 0 :test_sets.select{|test_set| test_set.is_public == false}.count
|
||||
@test_sets_public_count = @test_sets_count - @test_sets_hidden_count
|
||||
had_test = @game.outputs
|
||||
@had_test_count = had_test.count
|
||||
@had_passed_testsests_error_count = had_test.blank? ? 0 : had_test.select{|had_test| had_test.result == false}.count
|
||||
@had_passed_testsests_hidden_count = had_test.blank? ? 0 : had_test.select{|had_test| had_test.result == true && had_test.is_public == false}.count
|
||||
@had_passed_testsests_public_count = had_test.blank? ? 0 : had_test.select{|had_test| had_test.result == true && had_test.is_public == true}.count
|
||||
@final_score = @game.final_score.to_i
|
||||
# @had_tested如果已评测过,output中至少会有一条记录
|
||||
@had_tested = Output.where(:game_id => @game.id).count
|
||||
@had_passed_testsests = Output.where(:game_id => @game.id, :result => true).count
|
||||
# 出错的测试用例序号
|
||||
error_position = Output.where(:game_id => @game.id, :result => false).last
|
||||
@error_position = error_position.blank? ? 0 : error_position.try(:test_set_position).to_i
|
||||
# @had_done 1 已通关
|
||||
(@myshixun.games.count == @game_challenge.position && @game.status ==2) ? @had_done = 1 : @had_done = 0
|
||||
# 异常结果
|
||||
|
||||
@had_done = (@myshixun.games.where(:status => 2).count == @shixun.game.count ? 1 : 0)
|
||||
error_position = had_test.blank? ? nil : had_test.select{|had_test| had_test.result == false}.last
|
||||
@latest_output = error_position.try(:out_put).gsub("\r\n", "<br />") unless error_position.try(:out_put).blank?
|
||||
# @latest_output = @game.latest_output.try(:expect_output)
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.js
|
||||
|
|
@ -161,34 +157,64 @@ class GamesController < ApplicationController
|
|||
redirect_to myshixun_game_path(@game, :myshixun_id => @myshixun)
|
||||
end
|
||||
|
||||
# @myshixun -status 1:完成实训
|
||||
def game_status
|
||||
game_challenge = @game.challenge
|
||||
# @had_done 1 已通关
|
||||
(@myshixun.games.count == game_challenge.position && @game.status ==2) ? had_done = 1 : had_done = 0
|
||||
# 下一关自动开启
|
||||
if had_done != 1 && @game.status == 2
|
||||
@game.next_game.update_attribute(:status, 0)
|
||||
# 全部通关奖励1000分
|
||||
if had_done == 1
|
||||
reward_grade(@game.user, @game.id, @game.class, 1000)
|
||||
@myshixun.update_attribute(:status, 1)
|
||||
else
|
||||
# 通过当前一关
|
||||
if @game.status == 2
|
||||
@game.next_game.update_attribute(:status, 0)
|
||||
reward_grade(@game.user, @game.id, @game.class, game_challenge.score)
|
||||
end
|
||||
end
|
||||
test_sets = game_challenge.test_sets
|
||||
unless test_sets.blank?
|
||||
total_test_sets = test_set_static_data(test_sets)
|
||||
end
|
||||
test_sets_count = test_sets.count
|
||||
test_sets_hidden_count = test_sets.where(:is_public => false).count
|
||||
final_score = @game.final_score.to_i
|
||||
# @had_tested如果已评测过,output中至少会有一条记录
|
||||
had_tested = Output.where(:game_id => @game.id).count
|
||||
had_passed_testsests = Output.where(:game_id => @game.id, :result => true).count
|
||||
# 出错的测试用例序号
|
||||
error_position = Output.where(:game_id => @game.id, :result => false).last
|
||||
static_error_position = error_position.blank? ? 0 : error_position.try(:test_set_position).to_i
|
||||
consume_time = @game.status == 2 ? game_spend_time(@game.open_time, @game.updated_at) : game_spend_time(@game.open_time, Time.now)
|
||||
|
||||
logger.info("#################################{@public_test_sets}")
|
||||
@test_sets_count = test_sets.count
|
||||
@test_sets_hidden_count = test_sets.blank? ? 0 :test_sets.select{|test_set| test_set.is_public == false}.count
|
||||
@test_sets_public_count = @test_sets_count - @test_sets_hidden_count
|
||||
had_test = @game.outputs
|
||||
@had_test_count = had_test.count
|
||||
@had_passed_testsests_error_count = had_test.blank? ? 0 : had_test.select{|had_test| had_test.result == false}.count
|
||||
@had_passed_testsests_hidden_count = had_test.blank? ? 0 : had_test.select{|had_test| had_test.result == true && had_test.is_public == false}.count
|
||||
@had_passed_testsests_public_count = had_test.blank? ? 0 : had_test.select{|had_test| had_test.result == true && had_test.is_public == true}.count
|
||||
@final_score = @game.final_score.to_i
|
||||
@had_done = (@myshixun.games.where(:status => 2).count == @myshixun.games.count ? 1 : 0)
|
||||
error_position = had_test.blank? ? nil : had_test.select{|had_test| had_test.result == false}.last
|
||||
@latest_output = error_position.try(:out_put).gsub("\r\n", "<br />") unless error_position.try(:out_put).blank?
|
||||
# test_sets_count = test_sets.count
|
||||
# test_sets_hidden_count = test_sets.where(:is_public => false).count
|
||||
# final_score = @game.final_score.to_i
|
||||
# # @had_tested如果已评测过,output中至少会有一条记录
|
||||
# had_tested = Output.where(:game_id => @game.id).count
|
||||
# had_passed_testsests = Output.where(:game_id => @game.id, :result => true).count
|
||||
# # 出错的测试用例序号
|
||||
# error_position = Output.where(:game_id => @game.id, :result => false).last
|
||||
# static_error_position = error_position.blank? ? 0 : error_position.try(:test_set_position).to_i
|
||||
# consume_time = @game.status == 2 ? game_spend_time(@game.open_time, @game.updated_at) : game_spend_time(@game.open_time, Time.now)
|
||||
# 异常结果
|
||||
latest_output = error_position.try(:out_put).gsub("\r\n", "<br />").html_safe unless error_position.try(:out_put).blank?
|
||||
render :json => {test_sets: total_test_sets, status: @game.status, had_done: had_done, latest_output: latest_output, error_position: static_error_position,
|
||||
had_passed_testsests:had_passed_testsests, test_sets_count:test_sets_count, test_sets_hidden_count:test_sets_hidden_count,
|
||||
final_score:final_score, had_tested:had_tested, consume_time: consume_time}
|
||||
render :json => {test_sets: total_test_sets,
|
||||
test_sets_count: @test_sets_count,
|
||||
test_sets_hidden_count: @test_sets_hidden_count,
|
||||
test_sets_public_count: @test_sets_public_count,
|
||||
had_test_count: @had_test_count,
|
||||
had_passed_testsests_error_count: @had_passed_testsests_error_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,
|
||||
latest_output: @latest_output,
|
||||
status: @game.status,
|
||||
had_done: had_done}
|
||||
end
|
||||
|
||||
def change_status
|
||||
|
|
@ -216,21 +242,40 @@ class GamesController < ApplicationController
|
|||
# 如果已看过,下次可以免费查看
|
||||
# viewed 1: 直接查看 2:弹框提示将要扣除积分,确定后显示内容 3:弹框提示分数不够
|
||||
def answer
|
||||
challenge = @game.challenge
|
||||
user = User.current
|
||||
@challenge_score = challenge.score.to_i
|
||||
user_score = user.grade.to_i
|
||||
@score = user_score - @challenge_score
|
||||
# 已经开启过
|
||||
@answer = challenge.answer
|
||||
if @game.answer_open
|
||||
@viewed = 1
|
||||
else
|
||||
if @score >= 0
|
||||
@viewed = 2
|
||||
else
|
||||
@viewed = 3
|
||||
end
|
||||
end
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
def minus_score
|
||||
challenge = @game.challenge
|
||||
user = User.current
|
||||
challenge_score = challenge.score.to_i
|
||||
user_score = user.grade.to_i
|
||||
@score = user_score - challenge_score
|
||||
# 已经开启过
|
||||
if @game.answer_open
|
||||
render :json => {:answer => challenge.answer, :viewed => 1}
|
||||
else
|
||||
if @score > 0
|
||||
user.update_column(:grade, @score)
|
||||
render :json => {:answer => challenge.answer, :viewed => 2}
|
||||
else
|
||||
render :json => {:answer => false, :viewed => 3}
|
||||
end
|
||||
@answer = challenge.answer
|
||||
|
||||
user.update_column(:grade, @score)
|
||||
@game.update_column(:answer_open, true)
|
||||
|
||||
respond_to do |format|
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -27,16 +27,14 @@ class MyshixunsController < ApplicationController
|
|||
output = Output.where(:game_id => game.id, :test_set_position => j_test_set['caseId'].to_i).first
|
||||
if output.nil?
|
||||
game_outputs = Output.create(:code => status, :game_id => game_id, :out_put => outPut, :test_set_position => j_test_set['caseId'],
|
||||
:actual_output => actual_output, :result => j_test_set['passed'].to_i)
|
||||
:actual_output => actual_output, :result => j_test_set['passed'].to_i, :is_public => j_test_set['isPublic'].to_i)
|
||||
else
|
||||
output.update_attributes(:code => status, :out_put => outPut, :actual_output => actual_output.force_encoding("utf-8"), :result => j_test_set['passed'].to_i)
|
||||
output.update_attributes(:code => status, :out_put => outPut, :actual_output => actual_output, :result => j_test_set['passed'].to_i)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
if status == "0"
|
||||
game.update_attribute(:status, 2)
|
||||
game.update_attribute(:final_score, challenge.score)
|
||||
game.update_attributes!(:status => 2, :final_score => challenge.score, :end_time => Time.now)
|
||||
else
|
||||
game.update_attribute(:status, 0)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ module ApplicationHelper
|
|||
def reward_grade(user, container_id, container_type, score)
|
||||
grade = Grade.where(:user_id => user.id, :container_id => container_id, :container_type => container_type).first
|
||||
unless grade.nil?
|
||||
user.update_column(:grade, (500 + user.grade.to_i))
|
||||
user.update_column(:grade, (score.to_i + user.grade.to_i))
|
||||
Grade.create!(:user_id => user.id, :container_id => container_id, :container_type => container_type, :score => score)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
class Game < ActiveRecord::Base
|
||||
# stauts 0: can exe 1:doing 2:successed 3:locked
|
||||
default_scope :order => 'created_at desc'
|
||||
attr_accessible :myshixun_id, :user_id, :status, :final_score, :challenge_id, :open_time, :identifier
|
||||
attr_accessible :myshixun_id, :user_id, :status, :final_score, :challenge_id, :open_time, :identifier, :answer_open, :end_time
|
||||
belongs_to :myshixun,:touch=> true
|
||||
belongs_to :user
|
||||
belongs_to :challenge
|
||||
|
|
@ -14,7 +14,6 @@ class Game < ActiveRecord::Base
|
|||
identifier
|
||||
end
|
||||
|
||||
|
||||
def last_game
|
||||
challenge = self.challenge
|
||||
last_challenge_id = challenge.last_challenge
|
||||
|
|
|
|||
|
|
@ -104,11 +104,11 @@
|
|||
</li>
|
||||
<li class="clearfix">
|
||||
<label class="panel-form-label fl">文件路径:</label>
|
||||
<%= f.text_field :path, :class => "panel-form-width-690 panel-box-sizing fl", :no_label => true, :placeholder => "进入实训后将默认打开该文件,如:app/controllers/welcome_controller.rb", :maxlength => "256" %>
|
||||
<%= f.text_field :path, :class => "panel-form-width-690 panel-box-sizing fl", :no_label => true, :placeholder => "进入实训后将默认打开该文件,如:src/test/welcome.java", :maxlength => "256" %>
|
||||
</li>
|
||||
<li class="clearfix">
|
||||
<label class="panel-form-label fl">执行文件:</label>
|
||||
<%= f.text_field :exec_path, :class => "panel-form-width-690 panel-box-sizing fl", :no_label => true, :placeholder => "输入关卡需要执行的文件路径,如:app/controllers/welcome_controller.rb", :maxlength => "256" %>
|
||||
<%= f.text_field :exec_path, :class => "panel-form-width-690 panel-box-sizing fl", :no_label => true, :placeholder => "输入关卡需要执行的文件路径,如:src/test/main.java", :maxlength => "256" %>
|
||||
</li>
|
||||
<li class="clearfix">
|
||||
<label class="panel-form-label fl">预备知识:</label>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
<div class="fit -scroll">
|
||||
<div class="-layout-v -fit">
|
||||
<div class="-flex -scroll task-padding16 panel-box-sizing new_li" id="game_answer_show">
|
||||
<textarea style="display:none;" id="editorMd_contents"><%= @answer %></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
answer_md = editormd.markdownToHTML("game_answer_show", {
|
||||
htmlDecode : "style,script,iframe", // you can filter tags decode
|
||||
taskList : true,
|
||||
tex : false, // 数学公式
|
||||
flowChart : true, // 默认不解析
|
||||
sequenceDiagram : true // 默认不解析
|
||||
});
|
||||
</script>
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
var consumeTime = 0; // 耗时
|
||||
<% if @game.status == 2 %>
|
||||
startTime = (new Date("<%= consume_time(@game.open_time) %>")).getTime();
|
||||
endTime = (new Date("<%= consume_time(@game.updated_at) %>")).getTime();
|
||||
endTime = (new Date("<%= consume_time(@game.end_time) %>")).getTime();
|
||||
consumeTime = parseInt(endTime - startTime);
|
||||
<% else %>
|
||||
startTime = (new Date("<%= consume_time(@game.open_time) %>")).getTime();
|
||||
|
|
@ -80,13 +80,22 @@
|
|||
console.log( eval('[' + data.test_sets + ']'));
|
||||
var html = bt('t:exec_results_1',{
|
||||
"test_sets": eval('[' + data.test_sets + ']'),
|
||||
error_position: data.error_position,
|
||||
// error_position: data.error_position,
|
||||
// test_sets_count: data.test_sets_count,
|
||||
// test_sets_hidden_count: data.test_sets_hidden_count,
|
||||
// final_score: data.final_score,
|
||||
// passed_teststest: data.had_passed_testsests,
|
||||
// latest_output: data.latest_output,
|
||||
// game_outputs_count: data.had_tested,
|
||||
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,
|
||||
passed_teststest: data.had_passed_testsests,
|
||||
latest_output: data.latest_output,
|
||||
game_outputs_count: data.had_tested
|
||||
latest_output: data.latest_output
|
||||
});
|
||||
console.log(html);
|
||||
$("#game_test_set_results").html(html);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
<div style="width:460px;">
|
||||
<div class="task-popup-title clearfix">
|
||||
<h3 class="fl color-grey">提示</h3>
|
||||
<a href="javascript:void(0);" onclick="hideModal()"><i class="fa fa-times-circle font-18 link-color-grey fr"></i></a>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div class="sy_popup_con" style="width:380px;">
|
||||
<ul class="sy_popup_add" >
|
||||
<li class="center mb30" style="line-height:20px">
|
||||
333333333333333333333333333
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
</script>
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
<div style="width:460px;">
|
||||
<div class="task-popup-title clearfix">
|
||||
<h3 class="fl color-grey">提示</h3>
|
||||
<a href="javascript:void(0);" onclick="hideModal()"><i class="fa fa-times-circle font-18 link-color-grey fr"></i></a>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div class="sy_popup_con" style="width:380px;">
|
||||
<% if @viewed == 2 %>
|
||||
<ul class="sy_popup_add" >
|
||||
<li class="center mb30" style="line-height:20px">
|
||||
将扣除<%= @challenge_score %>点积分<br />是否确认查看答案
|
||||
</li>
|
||||
<div class="task-popup-submit clearfix" style="width: 120px">
|
||||
<a href="javascript:void(0);" class="task-btn fl" onclick="hideModal();">取消</a>
|
||||
<a href="javascript:void(0);" class="task-btn task-btn-green fr" onclick="minus_shixun_score();hideModal();">确定</a>
|
||||
</div>
|
||||
<% else %>
|
||||
<li class="center mb30" style="line-height:20px">
|
||||
本操作需要扣除<%= @challenge_score %>点积分<br />你的积分不够
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function minus_shixun_score(){
|
||||
$.ajax({
|
||||
url: '<%= minus_score_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' + '.js'
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
|
@ -18,10 +18,10 @@
|
|||
<div class="fit -scroll">
|
||||
<div class="-layout-v -fit">
|
||||
<div class="-flex -scroll task-padding16">
|
||||
<! if(game_outputs_count != "0") { !>
|
||||
<! if(error_position != "0") { !>
|
||||
<! 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"><!= error_position !>/<!= test_sets_count !></span> <!= latest_output !>
|
||||
<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">
|
||||
|
|
@ -60,10 +60,10 @@
|
|||
<div class="fit -scroll">
|
||||
<div class="-layout-v -fit">
|
||||
<div class="-flex -scroll task-padding16 ">
|
||||
<! if(game_outputs_count != "0") { !>
|
||||
<! if(error_position != "0") { !>
|
||||
<! 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"><!= error_position !>/<!= test_sets_count !></span> <!= latest_output !>
|
||||
<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">
|
||||
|
|
@ -74,8 +74,8 @@
|
|||
<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"><!= passed_teststest !>/<!= test_sets_count !></span></li>
|
||||
<li><span class="-task-ces-info-left">隐藏测试:</span><span class="color-light-green"><!= test_sets_hidden_count !>/<!= test_sets_count !></span></li>
|
||||
<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">+ <!= final_score !></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -95,14 +95,17 @@
|
|||
// 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? %>],
|
||||
error_position: '<%= @error_position %>',
|
||||
// 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 %>',
|
||||
test_sets_hidden_count: '<%= @test_sets_hidden_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 %>',
|
||||
passed_teststest: '<%= @had_passed_testsests %>',
|
||||
latest_output: '<%= @latest_output.html_safe unless @latest_output.blank? %>',
|
||||
game_outputs_count: '<%= @had_tested %>'
|
||||
had_done: '<%= @had_done %>',
|
||||
latest_output: '<%= @latest_output %>'
|
||||
}
|
||||
);
|
||||
$("#game_test_set_results").html(html);
|
||||
|
|
@ -121,158 +124,4 @@
|
|||
$("#test_case_"+id).toggle();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<% if false %>
|
||||
<div id="code_results" class="panel-footer CELL COLS mt15 ml15">
|
||||
</div>
|
||||
<script id="t:exec_results" type="text/html">
|
||||
<div class="col-width content-history CELL mb15" >
|
||||
<div class="panel-header clearfix">
|
||||
<h3 class="fl">测评历史</h3>
|
||||
<div class="fr mt5">
|
||||
<a href="javascript:void(0)" onclick="extend_window()"><i class="fa fa-expand font-14 fl color-grey"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-history-inner">
|
||||
<!--<! if (results.length != 0) { !>-->
|
||||
<! for(var i=0;i< results.length; i++) { !>
|
||||
<! if(results[i][0] == 0){ !>
|
||||
<div class="clearfix history-success mb10">
|
||||
<span class="icon-success fl mr5"><!= results.length - i !></span>
|
||||
<p class="fl">恭喜,您已经完成了本任务!</p>
|
||||
<a href="/myshixuns/<%= @myshixun.id %>/games/<%= @game.id %>/outputs_show?game_output_id=<!= results[i][1] !>" class="fr mr10" data-remote="true">详情</a>
|
||||
</div>
|
||||
<! }else{ !>
|
||||
<div class="clearfix history-fail mb10">
|
||||
<span class="icon-fail fl mr5"><!= results.length - i !></span>
|
||||
<p class="fl">错误结果!</p>
|
||||
<a href="/myshixuns/<%= @myshixun.id %>/games/<%= @game.id %>/outputs_show?game_output_id=<!= results[i][1] !>" class="fr mr10" data-remote="true">详情</a>
|
||||
<div class="cl"></div>
|
||||
</div>
|
||||
<div class="undis" style="background: #f5f9fc;padding: 10px;margin-top:-10px;margin-bottom: 10px" id="game_exception_results_<!= results[i][1] !>"></div>
|
||||
<! } !>
|
||||
<! } !>
|
||||
<!--<! } !>-->
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-width content-output ml15 CELL mb15">
|
||||
<div class="panel-header clearfix">
|
||||
<h3>测试输出</h3>
|
||||
</div>
|
||||
<div class="content-history-inner" id="game_test_output"></div>
|
||||
<div class="undis" id="game_test_output1">
|
||||
<%= h @latest_output %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-width content-submit ml15 CELL mb15">
|
||||
<div class="panel-header">
|
||||
<h3 >操作</h3>
|
||||
</div>
|
||||
<div class="content-submitbox">
|
||||
<div id="game_rep_modify">
|
||||
</div>
|
||||
<! if(status == 0){ !>
|
||||
<div id="game_commit">
|
||||
<a href="javascript:void(0)" class="task-btn task-btn-green" onclick="training_task_submmit();">提交评测</a>
|
||||
</div>
|
||||
<! }else if(status == 1){ !>
|
||||
<a class="task-btn mb10">评测中..</a>
|
||||
<! }else if(status == 2 && had_done != 1){ !>
|
||||
<%= link_to "下 一 关", {:controller => 'games', :action => "next_step", :id => @game, :myshixun_id => @myshixun}, :class => "task-btn task-btn-green", :remote => true %>
|
||||
<! } !>
|
||||
<! if(had_done == 1) { !>
|
||||
<a href="javascript:void(0)" class="task-btn mb10" >已通关</a>
|
||||
<! } !>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script >
|
||||
var bt = baidu.template;
|
||||
bt.LEFT_DELIMITER = '<!';
|
||||
bt.RIGHT_DELIMITER = '!>';
|
||||
$(function(){
|
||||
var html = bt('t:exec_results',{status: <%= @game.status %>, results: <%= @results %>, had_done: "<%= @had_done %>"});
|
||||
$("#code_results").html(html);
|
||||
$("#game_test_output").html($("#game_test_output1").text())
|
||||
});
|
||||
function training_task_submmit(){
|
||||
var i = 0;
|
||||
$("#ajax-indicator").show();
|
||||
$("#game_commit").html("<a class='task-btn mb10'>评测中..</a>");
|
||||
$.ajax({
|
||||
url: '<%= game_build_myshixun_game_path(@game, :myshixun_id => @myshixun) %>',
|
||||
success: function (){
|
||||
//移除载入
|
||||
var temp = $("#ajax-indicator").children('span')[0];
|
||||
$("#ajax-indicator").children('span')[0].remove();
|
||||
$("#ajax-indicator").css('border', 0);
|
||||
$("#ajax-indicator").css('padding', 0);
|
||||
|
||||
var intId = setInterval(function(){
|
||||
var ajaxTimeoutTest = $.ajax({
|
||||
url: '<%= game_status_myshixun_game_path(@game, :myshixun_id => @myshixun) %>',
|
||||
timeout : 50000,
|
||||
data:'test',
|
||||
success:function(data){
|
||||
//如果查到了,就退出
|
||||
// i变量用来统计setInterval执行了多少次,便于统计访问时间
|
||||
i = i + 1;
|
||||
if(data.status == 2 || data.status == 0){
|
||||
clearInterval(intId);
|
||||
// 显示载入
|
||||
$("#ajax-indicator").html(temp);
|
||||
$("#ajax-indicator").css('border', "1px solid #bbb");
|
||||
$("#ajax-indicator").css('padding', "0.6em");
|
||||
var html = bt('t:exec_results',{status: data.status, results: data.results, had_done: data.had_done});
|
||||
$("#code_results").html(html);
|
||||
console.log(data.output)
|
||||
$("#game_test_output").html(data.output)
|
||||
var html = bt('t:extend_exec_results',{status: data.status, output: data.output, results: data.results, had_done: data.had_done});
|
||||
$("#extend_code_results").html(html);
|
||||
if(data.status == 2){
|
||||
if( data.had_done == 0 ) {
|
||||
var htmlvalue = "<%= j (render :partial => 'games/pass_game_show', :locals => { :game=> @game, :myshixun => @myshixun, :had_done => 0}) %>";
|
||||
}else{
|
||||
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);
|
||||
}
|
||||
}
|
||||
// 访问30次,即60s后后台还未改变状态即执行
|
||||
if(i == 30){
|
||||
$.ajax({
|
||||
url: '<%= change_status_myshixun_game_path(@game, :myshixun_id => @myshixun) %>',
|
||||
success:function(data){
|
||||
clearInterval(intId);
|
||||
var html = bt('t:exec_results',{status: data.status, output: data.output, results: data.results, had_done: data.had_done});
|
||||
$("#code_results").html(html);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
complete: function(XMLHttpRequest,status){if(status=='timeout'){
|
||||
ajaxTimeoutTest.abort();
|
||||
clearInterval(intId);
|
||||
}}
|
||||
});
|
||||
}, 2000);
|
||||
}
|
||||
});
|
||||
}
|
||||
function extend_window(){
|
||||
$("#extend_code_results").show();
|
||||
}
|
||||
function file_edit_submit1(){
|
||||
$('#file_update_id').submit();
|
||||
$("#bottom_save_edit").hide();
|
||||
}
|
||||
|
||||
</script>
|
||||
<% end %>
|
||||
</script>
|
||||
|
|
@ -18,12 +18,13 @@
|
|||
<li id="tab_nav_2" onclick="HoverLi1(2);">
|
||||
<a href="javascript:void(0);" class="tab_type" style="font-size: 16px">预备知识</a>
|
||||
</li>
|
||||
<li id="tab_nav_3" onclick="HoverLi1(3);">
|
||||
<% if @game.answer_open %>
|
||||
<li id="tab_nav_3" onclick="">
|
||||
<a href="javascript:void(0);" class="tab_type" style="font-size: 16px">参考答案</a>
|
||||
<!-- <%# if @game.answer_open %>
|
||||
<a href="javascript:void(0);" class="tab_type" style="font-size: 16px">参考答案</a>
|
||||
<% else %>
|
||||
<%= link_to "参考答案", answer_myshixun_game_path(@game, :myshixun_id => @myshixun), :class => "tab_type f16" %>
|
||||
<% end %>
|
||||
<%# else %>
|
||||
<%#= link_to "参考答案", answer_myshixun_game_path(@game, :myshixun_id => @myshixun), :class => "tab_type f16" %>
|
||||
<%# end %>-->
|
||||
</li>
|
||||
<span class="btn-cir-big fr mt8 mr15" >经验值:<%= @game_challenge.score %></span>
|
||||
</ul>
|
||||
|
|
@ -51,9 +52,8 @@
|
|||
<div class="fit -scroll">
|
||||
<div class="-layout-v -fit">
|
||||
<div class="-flex -scroll task-padding16 panel-box-sizing new_li" id="game_answer_show">
|
||||
<textarea style="display:none;"><%= @game_challenge.answer %></textarea>
|
||||
<textarea style="display:none;" id="editorMd_contents"></textarea>
|
||||
</div>
|
||||
<!-- <div class="undis" id="hidden_game_answer"><%#= @game_challenge.answer %></div>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -119,13 +119,7 @@
|
|||
flowChart : true, // 默认不解析
|
||||
sequenceDiagram : true // 默认不解析
|
||||
});
|
||||
answer_md = editormd.markdownToHTML("game_answer_show", {
|
||||
htmlDecode : "style,script,iframe", // you can filter tags decode
|
||||
taskList : true,
|
||||
tex : false, // 数学公式
|
||||
flowChart : true, // 默认不解析
|
||||
sequenceDiagram : true // 默认不解析
|
||||
});
|
||||
|
||||
/* myCodeMirror.setSize("auto", "auto");//设置版本库codemirror的高度
|
||||
$("#game_answer_show").find(".CodeMirror-scroll").css("margin-bottom", 0);
|
||||
$("#game_answer_show" ).children(".CodeMirror").css("line-height", 1.2);
|
||||
|
|
@ -133,6 +127,11 @@
|
|||
// 设置图片最大宽度不能超出边框
|
||||
$('#task_pass_contents').find('img').css("max-width", "100%");
|
||||
});
|
||||
$("#tab_nav_3").click(function(){
|
||||
$.ajax({
|
||||
url: '<%= answer_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' + '.js'
|
||||
});
|
||||
});
|
||||
function error_correction_pop(){
|
||||
var htmlvalue = "<%= escape_javascript(render :partial => 'games/send_error_pop') %>";
|
||||
pop_box_new(htmlvalue,460,316);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
<% if @viewed == 1 %>
|
||||
$("#tab_con_3").html('<%= j (render :partial => 'games/acquire_answer') %>');
|
||||
$("#tab_nav_1").removeClass('tab_hover');
|
||||
$("#tab_nav_2").removeClass('tab_hover');
|
||||
$("#tab_nav_3").addClass('tab_hover');
|
||||
$("#tab_con_3").show();
|
||||
<% else %>
|
||||
var htmlvalue = "<%= escape_javascript(render :partial => 'game_answer_tip_pop') %>";
|
||||
pop_box_new(htmlvalue,460,300);
|
||||
<% end %>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
$("#tab_con_3").html('<%= j (render :partial => 'games/acquire_answer') %>');
|
||||
$("#tab_nav_1").removeClass('tab_hover');
|
||||
$("#tab_nav_2").removeClass('tab_hover');
|
||||
$("#tab_nav_3").addClass('tab_hover');
|
||||
$("#tab_con_3").show();
|
||||
|
|
@ -28,7 +28,7 @@
|
|||
<div class="cl"></div>
|
||||
|
||||
<div id="ajax-indicator" style="display:none;">
|
||||
<span><%= l(:label_loading) %></span>
|
||||
<span>载入中...</span>
|
||||
</div>
|
||||
<div id="ajax-modal" style="display:none;"></div>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -58,12 +58,14 @@
|
|||
<script type="text/javascript" src="/javascripts/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
|
||||
function g(o){return document.getElementById(o);}
|
||||
function HoverLi1(n){
|
||||
for(var i=1;i<=3;i++){
|
||||
for(var i=1;i<=2;i++){
|
||||
g('tab_nav_'+i).className='tab_nomal';
|
||||
g('tab_con_'+i).className='undis';
|
||||
}
|
||||
g('tab_con_'+n).className='dis';
|
||||
g('tab_nav_'+n).className='tab_hover';
|
||||
$("#tab_con_3").hide();
|
||||
$("#tab_nav_3").removeClass('tab_hover');
|
||||
/* if(n == 3){
|
||||
// 点击参考答案时,让codemirror展示,如果不refresh的话,第一次展示会隐藏
|
||||
myCodeMirror.refresh();
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@
|
|||
<%= link_to shixun.owner.try(:show_name), user_path(shixun.owner), :class => "task-index-name task-hide fl", :target => "_blank" %>
|
||||
</div>
|
||||
<a href="<%= shixun_path(shixun) %>" target="_blank">
|
||||
<div class="task-index-list-hover">
|
||||
<p><%= shixun.description %></p>
|
||||
</div>
|
||||
<!-- <div class="task-index-list-hover">
|
||||
<p><%#= shixun.description %></p>
|
||||
</div>-->
|
||||
</a>
|
||||
</div>
|
||||
<ul class="task-index-list-box-bottom clearfix">
|
||||
|
|
@ -32,5 +32,5 @@
|
|||
<!--<a href="javascript:void(0);">...</a>-->
|
||||
<!--<a href="javascript:void(0);">31</a>-->
|
||||
<!--<a href="javascript:void(0);" class="pages-big">下一页</a>-->
|
||||
<!--<div class="cl"></div>-->
|
||||
</div>
|
||||
<!--<div class="cl"></div>
|
||||
</div>-->
|
||||
|
|
@ -82,6 +82,7 @@ RedmineApp::Application.routes.draw do
|
|||
post 'file_update'
|
||||
get 'file_edit'
|
||||
get 'answer'
|
||||
get 'minus_score'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
class AddAnswerOpenToGames < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :games, :answer_open, :boolean, :default => false
|
||||
add_column :games, :end_time, :datetime
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
class SyncEndTimeForGame < ActiveRecord::Migration
|
||||
def change
|
||||
games = Game.all
|
||||
games.each do |game|
|
||||
game.update_column(:end_time, game.updated_at)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class AddIsPublicToOutputs < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :outputs, :is_public, :boolean
|
||||
end
|
||||
end
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
|
|
@ -127,21 +127,16 @@ a:hover.task-btn-ver{background:#5f7cab;}
|
|||
/*pre标签换行*/
|
||||
.break_word{word-break: break-all;word-wrap: break-word;}
|
||||
.break_word_firefox{white-space: pre-wrap !important;word-break: break-all;}
|
||||
|
||||
.pr {position:relative;}
|
||||
/***** Ajax indicator ******/
|
||||
/***** loading ******/
|
||||
#ajax-indicator {
|
||||
position: absolute; /* fixed not supported by IE */
|
||||
background-color:#eee;
|
||||
border: 1px solid #bbb;
|
||||
top:35%;
|
||||
left:40%;
|
||||
width:20%;
|
||||
font-weight:bold;
|
||||
text-align:center;
|
||||
padding:0.6em;
|
||||
z-index:100;
|
||||
opacity: 0.5;
|
||||
top:0%;
|
||||
left:0%;
|
||||
width:100%;
|
||||
height:100%;
|
||||
z-index:1000;
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
html>body #ajax-indicator { position: fixed; }
|
||||
|
|
@ -149,7 +144,7 @@ html>body #ajax-indicator { position: fixed; }
|
|||
#ajax-indicator span {
|
||||
background-position: 0% 40%;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url(/images/loading.gif);
|
||||
background-image: url(../images/loading.gif);
|
||||
padding-left: 26px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue