Merge branch 'dev_huang' into develop

This commit is contained in:
huang 2017-05-05 16:38:10 +08:00
commit aa080318ee
22 changed files with 253 additions and 258 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,7 +1,7 @@
class Game < ActiveRecord::Base
# stauts 0: can exe 1doing 2successed 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

View File

@ -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>

View File

@ -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>

View File

@ -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);

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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);

View File

@ -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 %>

View File

@ -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();

View File

@ -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>

View File

@ -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();

View File

@ -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>-->

View File

@ -82,6 +82,7 @@ RedmineApp::Application.routes.draw do
post 'file_update'
get 'file_edit'
get 'answer'
get 'minus_score'
end
end
end

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
}