feat(ui): 重新设计判题结果页与提交页

- 判题结果页引入友好错误解释面板,按 verdict 类型给出提示与改进建议
- 新增 dedup_runtimeinfo() 函数将重复 RE 测试点折叠为区间汇总
- 区分管理员/源浏览者与普通用户视图,原始错误默认折叠
- 错误模式匹配扩展至 28 条,覆盖 glibc/Java/Python/Go 等常见运行时异常
- 提交页改用卡片式布局,编辑器工具栏与测试运行区交互优化
- 中英文语言文件补充相关文案与快捷操作标签
- 切换 LLM 点评 API 至 newapi.klarkxy.xyz,模型改为 minimax-m3
- 新增 .codegraph/.gitignore 忽略本地调试数据
This commit is contained in:
2026-07-08 20:56:17 +08:00
parent c4e0f104b4
commit 6c462655b9
7 changed files with 1236 additions and 419 deletions

View File

@@ -1,24 +1,143 @@
<?php $show_title="$MSG_SUBMIT - $OJ_NAME"; ?>
<?php include("template/$OJ_TEMPLATE/header.php");?>
<style>
#frmSolution {
width: 100%;
text-align: left;
<style>
.submit-wrapper {
max-width: 1200px;
margin: 20px auto;
padding: 0 16px;
}
.submit-card {
background: rgba(255,255,255,0.85);
border-radius: 12px;
padding: 24px;
box-shadow: 0 4px 20px rgba(0,0,0,0.08);
border: 1px solid rgba(255,255,255,0.5);
backdrop-filter: blur(10px);
}
.submit-header {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 12px;
padding-bottom: 16px;
margin-bottom: 20px;
border-bottom: 1px solid rgba(0,0,0,0.08);
}
.submit-title {
margin: 0;
font-size: 1.5em;
font-weight: 600;
color: #333;
}
.submit-title .problem-id {
color: #2185d0;
font-weight: 700;
}
.submit-toolbar {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 10px;
margin-bottom: 16px;
}
.submit-toolbar .field-group {
display: flex;
align-items: center;
gap: 8px;
}
.submit-toolbar .field-group > label {
margin: 0;
font-weight: 600;
color: #555;
white-space: nowrap;
}
.submit-toolbar select,
.submit-toolbar input[type="text"] {
font-size: 1em;
padding: 6px 10px;
border-radius: 6px;
border: 1px solid #d4d4d5;
background: #fff;
outline: none;
transition: border-color 0.15s;
}
.submit-toolbar select:focus,
.submit-toolbar input[type="text"]:focus {
border-color: #2185d0;
}
.submit-toolbar img#vcode {
border-radius: 4px;
cursor: pointer;
height: 32px;
vertical-align: middle;
}
.editor-card {
background: #fff;
border-radius: 8px;
border: 1px solid #d4d4d5;
overflow: hidden;
margin-bottom: 16px;
}
.editor-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 12px;
background: #f7f7f9;
border-bottom: 1px solid #e8e8e8;
font-size: 0.9em;
color: #666;
}
.editor-toolbar .editor-actions {
display: flex;
gap: 6px;
}
.editor-toolbar .icon-btn {
background: #fff;
border: 1px solid #d4d4d5;
border-radius: 4px;
padding: 4px 10px;
cursor: pointer;
font-size: 1em;
transition: all 0.15s;
color: #555;
}
.editor-toolbar .icon-btn:hover {
background: #2185d0;
color: #fff;
border-color: #2185d0;
}
#source {
display: block;
width: 100% !important;
height: 600px;
margin: 14px 0 0 !important;
height: 500px;
margin: 0 !important;
text-align: left !important;
font-family: 'Fira Mono', 'Cascadia Code', Consolas, monospace;
}
#source.ace_editor {
width: 100% !important;
border: 1px solid #d4d4d5;
border-radius: 6px;
border: none;
border-radius: 0;
}
#source.ace_editor,
@@ -28,174 +147,381 @@
text-align: left !important;
}
#source.ace_editor .ace_gutter {
border-radius: 6px 0 0 6px;
.ace-chrome .ace_marker-layer .ace_active-line {
background-color: rgba(0,0,199,0.12);
}
.ace-chrome .ace_marker-layer .ace_active-line{ /*当前行*/
background-color: rgba(0,0,199,0.3);
.submit-test-section {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
margin-bottom: 16px;
}
.button, input, optgroup, select, textarea { /*选择题的题号大小*/
font-family: sans-serif;
font-size: 150%;
line-height: 1.2;
@media (max-width: 768px) {
.submit-test-section {
grid-template-columns: 1fr;
}
}
</style>
<center>
<script src="<?php echo $OJ_CDN_URL?>include/checksource.js"></script>
<form id=frmSolution action="submit.php<?php if (isset($_GET['spa'])) echo "?spa" ?>" method="post" onsubmit='do_submit()' enctype="multipart/form-data" >
<?php if (!isset($_GET['spa']) || $solution_name ) {?>
<input type='file' name='answer' placeholder='Upload answer file' >
<?php } ?>
<?php if (isset($id)){?>
<span style="color:#0000ff">Problem <b><?php echo $id?></b></span>
<input id=problem_id type='hidden' value='<?php echo $id?>' name="id" >
<?php }else{
//$PID="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//if ($pid>25) $pid=25;
?>
Problem <span class=blue><b><?php echo chr($pid+ord('A'))?></b></span> of Contest <span class=blue><b><?php echo $cid?></b></span>
<input id="cid" type='hidden' value='<?php echo $cid?>' name="cid">
<input id="pid" type='hidden' value='<?php echo $pid?>' name="pid">
<?php }?>
<span id="language_span">Language:
<select id="language" name="language" onChange="reloadtemplate($(this).val());" >
<?php
$lang_count=count($language_ext);
if(isset($_GET['langmask']))
$langmask=$_GET['langmask'];
$langmask|=$OJ_LANGMASK;
$lang=(~((int)$langmask))&((1<<($lang_count))-1);
//$lastlang=$_COOKIE['lastlang'];
//if($lastlang=="undefined") $lastlang=1;
for($i=0;$i<$lang_count;$i++){
if($lang&(1<<$i))
echo"<option value=$i ".( $lastlang==$i?"selected":"").">
".$language_name[$i]."
</option>";
}
?>
</select>
<?php if($OJ_VCODE){?>
<?php echo $MSG_VCODE?>:
<input name="vcode" size=4 type=text autocomplete=off ><img id="vcode" alt="click to change" src="vcode.php" onclick="this.src='vcode.php?'+Math.random()">
<?php }?>
<button id="Submit" type="button" class="ui primary icon button" onclick="do_submit();"><?php echo $MSG_SUBMIT?></button>
<?php if (isset($OJ_ENCODE_SUBMIT)&&$OJ_ENCODE_SUBMIT){?>
<input class="btn btn-success" title="WAF gives you reset ? try this." type=button value="Encoded <?php echo $MSG_SUBMIT?>" onclick="encoded_submit();">
<input type=hidden id="encoded_submit_mark" name="reverse2" value="reverse"/>
<?php }?>
<!--选择题状态-->
<?php if ($spj>1 || !$OJ_TEST_RUN ){?>
<span class="btn" id=result><?php echo $MSG_STATUS?></span>
<?php }?>
</span>
<?php if($spj <= 1 && !$solution_name){ ?>
<button onclick="toggleTheme(event)" style="background-color: bisque; position: absolute; top: 5px; right:70px;" v-if="false">
<i>🌗</i>
</button>
<button onclick="increaseFontSize(event)" style="background-color: bisque; position: absolute; top: 5px; right:40px;" v-if="false">
<i></i>
</button>
<button onclick="decreaseFontSize(event)" style="background-color: bisque; position: absolute; top: 5px; right:10px;" v-if="false">
<i></i>
</button>
<?php } ?>
<?php
if(!$solution_name){
if($OJ_ACE_EDITOR){
if (isset($OJ_TEST_RUN)&&$OJ_TEST_RUN)
$height="400px";
else
$height="500px";
?>
<pre style="width:90%;height:<?php echo $height?>" cols=180 rows=16 id="source"><?php echo htmlentities($view_src,ENT_QUOTES,"UTF-8")?></pre>
<input type=hidden id="hide_source" name="source" value=""/>
<?php }else{ ?>
<textarea style="width:80%;height:600" cols=180 rows=30 id="source" name="source"><?php echo htmlentities($view_src,ENT_QUOTES,"UTF-8")?></textarea>
<?php }
}else{
echo "<br><h2>指定上传文件:$solution_name</h2>";
}
?>
<style>
.button, input, optgroup, select, textarea {
font-family: sans-serif;
font-size: 150%;
line-height: 1.15;
margin: 0;
background: border-box;
}
</style>
<div class="row">
<div class="column" style="display: flex;">
<?php if ( isset($OJ_TEST_RUN) && $OJ_TEST_RUN && $spj<=1 && !$solution_name ){?>
<div style="
margin-left: 60px;
width: 40%;
padding: 14px;
flex-direction: column;">
<div style="
display: flex;
.test-panel {
background: rgba(255,255,255,0.7);
border-radius: 8px;
background-color: rgb(255,255,255,0.4);" id="language_span"><?php echo $MSG_Input?></div>
<textarea style="width:100%" cols=40 rows=5 id="input_text" name="input_text" ><?php echo $view_sample_input?></textarea>
</div>
<div style="
width: 40%;
border: 1px solid #d4d4d5;
padding: 12px;
display: flex;
flex-direction: column;
">
<div style=" display: flex;
}
.test-panel-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 8px;
font-weight: 600;
color: #333;
}
.test-panel-header .status-badge {
font-size: 0.85em;
color: #666;
}
.test-panel textarea {
width: 100%;
min-height: 120px;
padding: 8px;
border-radius: 6px;
border: 1px solid #d4d4d5;
font-family: 'Fira Mono', 'Cascadia Code', Consolas, monospace;
font-size: 0.95em;
resize: vertical;
outline: none;
transition: border-color 0.15s;
box-sizing: border-box;
}
.test-panel textarea:focus {
border-color: #2185d0;
}
.submit-actions {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 12px;
padding-top: 16px;
border-top: 1px solid rgba(0,0,5,0.08);
}
.submit-actions .actions-left {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.submit-actions .actions-right {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.btn {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 8px 18px;
border-radius: 6px;
border: 1px solid transparent;
font-size: 1em;
font-weight: 500;
cursor: pointer;
transition: all 0.15s;
text-decoration: none;
line-height: 1.4;
}
.btn-primary {
background: #2185d0;
color: #fff;
}
.btn-primary:hover:not(:disabled) {
background: #1678c2;
color: #fff;
}
.btn-primary:disabled {
opacity: 0.6;
cursor: not-allowed;
}
.btn-info {
background: #00b5ad;
color: #fff;
}
.btn-info:hover:not(:disabled) {
background: #009c95;
color: #fff;
}
.btn-secondary {
background: #fff;
color: #333;
border-color: #d4d4d5;
}
.btn-secondary:hover {
background: #f7f7f9;
color: #2185d0;
border-color: #2185d0;
}
.btn-purple {
background: rgb(169,91,128);
color: #fff;
}
.btn-purple:hover {
background: rgb(149,71,108);
color: #fff;
}
.btn-green {
background: rgb(90,164,139);
color: #fff;
}
.btn-green:hover {
background: rgb(70,144,119);
color: #fff;
}
.file-upload {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 12px;
background: #f7f7f9;
border: 1px dashed #c0c0c0;
border-radius: 6px;
color: #555;
font-size: 0.95em;
cursor: pointer;
transition: all 0.15s;
}
.file-upload:hover {
border-color: #2185d0;
color: #2185d0;
background: #fff;
}
.file-upload input[type="file"] {
display: none;
}
.upload-notice {
text-align: center;
padding: 40px 20px;
background: rgba(255,255,255,0.6);
border-radius: 8px;
background-color: rgb(255,255,255,0.4);justify-content: space-between;" id="language_span"><?php echo $MSG_Output ?>
<span class="btn" id=result><?php echo $MSG_STATUS?></span>
border: 1px dashed #c0c0c0;
color: #555;
font-size: 1.1em;
}
.solution-name-title {
text-align: center;
color: #2185d0;
margin: 0 0 16px 0;
font-weight: 600;
}
#blockly {
margin: 16px 0;
}
#result.badge {
display: inline-block;
padding: 4px 10px;
border-radius: 12px;
background: #e8e8e8;
color: rgba(0,0,0,.6);
font-size: 0.85em;
font-weight: 700;
white-space: nowrap;
}
@media (max-width: 600px) {
.submit-card {
padding: 16px;
}
.submit-title {
font-size: 1.2em;
}
#source {
height: 350px;
}
.btn {
padding: 6px 12px;
font-size: 0.95em;
}
}
</style>
<div class="submit-wrapper">
<div class="submit-card padding">
<div class="submit-header">
<h1 class="submit-title">
<i class="edit icon"></i>
<?php echo $MSG_SUBMIT?>
<?php if (isset($id)){?>
<span class="problem-id">#<?php echo $id?></span>
<?php }else{?>
<span class="problem-id"><?php echo chr($pid+ord('A'))?></span>
<small style="color:#888;font-size:0.6em;">Contest #<?php echo $cid?></small>
<?php }?>
</h1>
</div>
<script src="<?php echo $OJ_CDN_URL?>include/checksource.js"></script>
<form id="frmSolution" action="submit.php<?php if (isset($_GET['spa'])) echo "?spa" ?>" method="post" onsubmit="do_submit()" enctype="multipart/form-data">
<textarea style="
width:100%;background-color: white;
" cols=10 rows=5 id="out" name="out" disabled="true" placeholder='<?php echo htmlentities($view_sample_output,ENT_QUOTES,'UTF-8')?>' ></textarea>
</div>
<?php } ?>
<?php if (isset($OJ_TEST_RUN)&&$OJ_TEST_RUN && $spj<=1 && !$solution_name ){?>
<!--运行按钮-->
<input style="
margin-top: 30px;
margin-left: 0 auto;
width: 7%;background-color: #22ba46a3;border-color: #00fff470;height: 130px;
" id="TestRun" class="btn btn-info" type=button value="<?php echo $MSG_TR?>" onclick=do_test_run();>
<?php }?>
<div class="submit-toolbar">
<?php if (!isset($_GET['spa']) || $solution_name ) {?>
<div class="field-group">
<label for="answer"><?php echo $MSG_FILENAME?></label>
<label class="file-upload">
<i class="upload icon"></i>
<span id="file-name"><?php echo isset($MSG_CHOOSE_FILE)?$MSG_CHOOSE_FILE:$MSG_FILENAME?></span>
<input type="file" name="answer" id="answer" onchange="document.getElementById('file-name').textContent=this.files[0]?this.files[0].name:'<?php echo isset($MSG_CHOOSE_FILE)?$MSG_CHOOSE_FILE:$MSG_FILENAME?>'">
</label>
</div>
<?php } ?>
<div class="field-group">
<label for="language"><i class="code icon"></i><?php echo $MSG_LANG?></label>
<select id="language" name="language" onChange="reloadtemplate($(this).val());">
<?php
$lang_count=count($language_ext);
if(isset($_GET['langmask']))
$langmask=$_GET['langmask'];
$langmask|=$OJ_LANGMASK;
$lang=(~((int)$langmask))&((1<<($lang_count))-1);
for($i=0;$i<$lang_count;$i++){
if($lang&(1<<$i))
echo "<option value=$i ".( $lastlang==$i?"selected":"").">".$language_name[$i]."</option>";
}
?>
</select>
</div>
</div>
<?php if($OJ_VCODE){?>
<div class="field-group">
<label for="vcode"><?php echo $MSG_VCODE?></label>
<input name="vcode" id="vcode" size="4" type="text" autocomplete="off" style="width:80px;">
<img id="vcode-img" alt="click to change" src="vcode.php" onclick="this.src='vcode.php?'+Math.random()">
</div>
<?php }?>
</div>
<?php
if($OJ_ACE_EDITOR){
if (isset($OJ_TEST_RUN)&&$OJ_TEST_RUN)
$height="400px";
else
$height="500px";
?>
<div class="editor-card">
<div class="editor-toolbar">
<span><i class="file code outline icon"></i> <?php echo $MSG_SOURCE_CODE?></span>
<div class="editor-actions">
<button type="button" class="icon-btn" onclick="toggleTheme(event)" title="Theme">🌗</button>
<button type="button" class="icon-btn" onclick="increaseFontSize(event)" title="A+">A+</button>
<button type="button" class="icon-btn" onclick="decreaseFontSize(event)" title="A-">A-</button>
</div>
</div>
<pre style="width:100%;height:<?php echo $height?>;margin:0;" id="source"><?php echo htmlentities($view_src,ENT_QUOTES,"UTF-8")?></pre>
<input type="hidden" id="hide_source" name="source" value=""/>
</div>
<input type="hidden" value="0" id="problem_id" name="problem_id"/>
<?php }else{ ?>
<div class="editor-card">
<div class="editor-toolbar">
<span><i class="file code outline icon"></i> <?php echo $MSG_SOURCE_CODE?></span>
</div>
<textarea style="width:100%;height:400px;margin:0;padding:12px;border:none;border-radius:0;" id="source" name="source"><?php echo htmlentities($view_src,ENT_QUOTES,"UTF-8")?></textarea>
</div>
<?php }
if(!$solution_name){
?>
<?php if ( isset($OJ_TEST_RUN) && $OJ_TEST_RUN && $spj<=1 && !$solution_name ){?>
<div class="submit-test-section">
<div class="test-panel">
<div class="test-panel-header">
<span><i class="sign in alternate icon"></i> <?php echo $MSG_Input?></span>
</div>
<textarea id="input_text" name="input_text"><?php echo $view_sample_input?></textarea>
</div>
<div class="test-panel">
<div class="test-panel-header">
<span><i class="sign out alternate icon"></i> <?php echo $MSG_Output?></span>
<span class="status-badge"><span class="badge" id="result"><?php echo $MSG_STATUS?></span></span>
</div>
<textarea id="out" name="out" disabled="true" placeholder="<?php echo htmlentities($view_sample_output,ENT_QUOTES,'UTF-8')?>"></textarea>
</div>
</div>
<?php } else { ?>
<div style="text-align:right;margin-bottom:12px;">
<span class="badge" id="result"><?php echo $MSG_STATUS?></span>
</div>
<?php } ?>
<?php } else { ?>
<h2 class="solution-name-title">📎 <?php echo $solution_name?></h2>
<?php } ?>
<div class="submit-actions">
<div class="actions-left">
<button id="Submit" type="button" class="btn btn-primary" onclick="do_submit();">
<i class="paper plane icon"></i> <?php echo $MSG_SUBMIT?>
</button>
<?php if ( isset($OJ_TEST_RUN) && $OJ_TEST_RUN && $spj<=1 && !$solution_name ){?>
<button id="TestRun" type="button" class="btn btn-info" onclick="do_test_run();">
<i class="play icon"></i> <?php echo $MSG_TR?>
</button>
<?php }?>
<?php if (isset($OJ_ENCODE_SUBMIT)&&$OJ_ENCODE_SUBMIT){?>
<button type="button" class="btn btn-secondary" onclick="encoded_submit();">
<i class="lock icon"></i> Encoded <?php echo $MSG_SUBMIT?>
</button>
<input type="hidden" id="encoded_submit_mark" name="reverse2" value="reverse"/>
<?php }?>
</div>
<?php if (isset($OJ_BLOCKLY)&&$OJ_BLOCKLY){?>
<div class="actions-right">
<input id="blockly_loader" type="button" class="btn btn-purple" onclick="openBlockly()" value="🧩 <?php echo $MSG_BLOCKLY_OPEN?>">
<input id="transrun" type="button" class="btn btn-green" onclick="loadFromBlockly()" value="▶ <?php echo $MSG_BLOCKLY_TEST?>" style="display:none;">
</div>
<?php }?>
</div>
<div id="blockly" class="center"></div>
<?php if (isset($id)){?>
<input id="problem_id" type="hidden" value="<?php echo $id?>" name="problem_id">
<?php }else{?>
<input id="cid" type="hidden" value="<?php echo $cid?>" name="cid">
<input id="pid" type="hidden" value="<?php echo $pid?>" name="pid">
<?php }?>
</form>
<?php if (isset($OJ_BLOCKLY)&&$OJ_BLOCKLY){?>
<input id="blockly_loader" type=button class="btn" onclick="openBlockly()" value="<?php echo $MSG_BLOCKLY_OPEN?>" style="color:white;background-color:rgb(169,91,128)">
<input id="transrun" type=button class="btn" onclick="loadFromBlockly() " value="<?php echo $MSG_BLOCKLY_TEST?>" style="display:none;color:white;background-color:rgb(90,164,139)">
<div id="blockly" class="center">Blockly</div>
<?php }?>
</form>
</center>
</div>
</div>
<script>
var sid=0;
@@ -219,25 +545,25 @@ function fresh_result(solution_id)
{
var tb=window.document.getElementById('result');
if(solution_id==undefined){
tb.innerHTML="Vcode Error!";
if($("#vcode")!=null) $("#vcode").click();
tb.innerHTML="Vcode Error!";
if($("#vcode-img")!=null) $("#vcode-img").click();
return ;
}
sid=parseInt(solution_id);
if(sid<=0){
tb.innerHTML="<?php echo str_replace("10",$OJ_SUBMIT_COOLDOWN_TIME,$MSG_BREAK_TIME) ?>";
if($("#vcode")!=null) $("#vcode").click();
if($("#vcode-img")!=null) $("#vcode-img").click();
return ;
}
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
{
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
@@ -246,8 +572,6 @@ function fresh_result(solution_id)
{
var r=xmlhttp.responseText;
var ra=r.split(",");
// alert(r);
// alert(judge_result[r]);
var loader="<img width=18 src=image/loader.gif>";
var tag="span";
if(ra[0]<4) tag="span disabled=true";
@@ -293,7 +617,7 @@ ret=ie.innerText;
return ret+"";
}
var count=0;
function encoded_submit(){
var mark="<?php echo isset($id)?'problem_id':'cid';?>";
@@ -315,16 +639,14 @@ function encoded_submit(){
}else{
$("#source").val(encode64(utf16to8(source)));
}
// source.value=source.value.split("").reverse().join("");
// alert(source.value);
document.getElementById("frmSolution").submit();
}
function do_submit(){
$("#Submit").attr("disabled","true"); // mouse has a bad key1
if(using_blockly)
$("#Submit").attr("disabled","true");
if(using_blockly)
translate();
if(typeof(editor) != "undefined"){
if(typeof(editor) != "undefined"){
$("#hide_source").val(editor.getValue());
}
var mark="<?php echo isset($id)?'problem_id':'cid';?>";
@@ -334,17 +656,35 @@ function do_submit(){
else
problem_id.value='<?php if (isset($cid))echo $cid?>';
document.getElementById("frmSolution").target="_self";
<?php if(isset($_GET['spa'])){?>
<?php if($solution_name) { ?>document.getElementById("frmSolution").submit(); <?php } ?> //如果是指定文件名则强制用文件post方式提交。
$.post("submit.php?ajax",$("#frmSolution").serialize(),function(data){fresh_result(data);});
<?php if($solution_name) { ?>document.getElementById("frmSolution").submit(); <?php } ?>
$.post("submit.php?ajax",$("#frmSolution").serialize(),function(data){
var sid=parseInt(data);
if(sid>0){
window.location.href="reinfo.php?sid="+sid;
}else{
fresh_result(data);
}
});
$("#Submit").prop('disabled', true);
$("#TestRun").prop('disabled', true);
count=<?php echo $OJ_SUBMIT_COOLDOWN_TIME?> * 2 ;
handler_interval= window.setTimeout("resume();",1000);
<?php if(isset($OJ_REMOTE_JUDGE)&&$OJ_REMOTE_JUDGE) {?>$("#sk").attr("src","remote.php"); <?php } ?>
<?php }else{?>
document.getElementById("frmSolution").submit();
$.post("submit.php?ajax",$("#frmSolution").serialize(),function(data){
var sid=parseInt(data);
if(sid>0){
window.location.href="reinfo.php?sid="+sid;
}else{
fresh_result(data);
}
});
$("#Submit").prop('disabled', true);
$("#TestRun").prop('disabled', true);
count=<?php echo $OJ_SUBMIT_COOLDOWN_TIME?> * 2 ;
handler_interval= window.setTimeout("resume();",1000);
<?php }?>
}
@@ -365,8 +705,6 @@ function do_test_run(){
var problem_id=document.getElementById(mark);
problem_id.value=-problem_id.value;
document.getElementById("frmSolution").target="testRun";
//$("#hide_source").val(editor.getValue());
//document.getElementById("frmSolution").submit();
$.post("submit.php?ajax",$("#frmSolution").serialize(),function(data){fresh_result(data);});
$("#Submit").prop('disabled', true);
$("#TestRun").prop('disabled', true);
@@ -380,13 +718,13 @@ function resume(){
var t=$("#TestRun")[0];
if(count<0){
$("#Submit").attr("disabled",false);
$("#Submit").text("<?php echo $MSG_SUBMIT?>");
$("#Submit").html('<i class="paper plane icon"></i> <?php echo $MSG_SUBMIT?>');
if(t!=null) $("#TestRun").attr("disabled",false);
if(t!=null) $("#TestRun").text("<?php echo $MSG_TR?>");
if(t!=null) $("#TestRun").html('<i class="play icon"></i> <?php echo $MSG_TR?>');
if( handler_interval) window.clearInterval( handler_interval);
if($("#vcode")!=null) $("#vcode").click();
if($("#vcode-img")!=null) $("#vcode-img").click();
}else{
$("#Submit").text("<?php echo $MSG_SUBMIT?>("+count+")");
$("#Submit").html('<i class="hourglass half icon"></i> <?php echo $MSG_SUBMIT?> ('+count+')');
if(t!=null)t.value="<?php echo $MSG_TR?>("+count+")";
window.setTimeout("resume();",1000);
}
@@ -426,7 +764,6 @@ function getAceModeName(lang){
}
function switchLang(lang){
editor.getSession().setMode("ace/mode/"+getAceModeName(lang));
}
function reloadtemplate(lang){
if(lang==undefined){
@@ -449,14 +786,12 @@ function openBlockly(){
$("#TestRun").hide();
$("#language")[0].scrollIntoView();
$("#language").val(6).hide();
//$("#language_span").hide();
$("#EditAreaArroundInfos_source").hide();
$('#blockly').html('<iframe name=\'frmBlockly\' width=90% height=580 src=\'blockly/demos/code/index.html\'></iframe>');
$('#blockly').html('<iframe name=\'frmBlockly\' width=100% height=580 src=\'blockly/demos/code/index.html\'></iframe>');
$("#blockly_loader").hide();
$("#transrun").show();
//$("#Submit").prop('disabled', true);
using_blockly=true;
}
function translate(){
var blockly=$(window.frames['frmBlockly'].document);
@@ -467,13 +802,12 @@ function translate(){
if(typeof(editor) != "undefined") editor.setValue(python.text());
else $("#source").val(python.text());
$("#language").val(6);
}
function loadFromBlockly(){
translate();
do_test_run();
$("#frame_source").hide();
// $("#Submit").prop('disabled', false);
}
</script>
<script language="Javascript" type="text/javascript" src="<?php echo $OJ_CDN_URL?>include/base64.js"></script>
@@ -515,7 +849,7 @@ function loadFromBlockly(){
editor.getSession().on("change", syncEditorSource);
switchLang(<?php echo $lastlang ?>);
syncEditorSource();
reloadtemplate($("#language").val());
reloadtemplate($("#language").val());
function getSourceDraftKey(languageOverride){
let language=languageOverride;
if(language===undefined||language===null||language===""){
@@ -534,22 +868,18 @@ function loadFromBlockly(){
if(typeof(editor) != "undefined")
$("#hide_source").val(editor.getValue());
localStorage.setItem(key,$("#hide_source").val());
//console.log("autosaving "+key+"..."+new Date());
}
}
$(document).ready(function(){
$("#source").css("height",window.innerHeight-180);
if($("#vcode")!=undefined) $("#vcode").click();
$("#source").css("height",window.innerHeight-220);
if($("#vcode-img")!=undefined) $("#vcode-img").click();
if(!!localStorage){
let key=getSourceDraftKey();
let saved=localStorage.getItem(key);
if(saved!=null&&saved!=""&&saved.length>editor.getValue().length){
//let load=confirm("发现自动保存的源码,是否加载?(仅有一次机会)");
//if(load){
console.log("loading "+saved.length);
if(typeof(editor) != "undefined")
editor.setValue(saved);
//}
console.log("loading "+saved.length);
if(typeof(editor) != "undefined")
editor.setValue(saved);
}
}
@@ -574,7 +904,7 @@ function loadFromBlockly(){
}
function toggleTheme(event) {
event.preventDefault();
if (editor.getTheme() === "ace/theme/xcode") {
editor.setTheme("ace/theme/monokai");
} else {
@@ -585,9 +915,9 @@ function loadFromBlockly(){
var level = 0;
var LOOP_SIZE = 100;
function finishTabifier(code) {
code = code.replace(/\n\s*\n/g, '\n'); //blank lines
code = code.replace(/^[\s\n]*/, ''); //leading space
code = code.replace(/[\s\n]*$/, ''); //trailing space
code = code.replace(/\n\s*\n/g, '\n');
code = code.replace(/^[\s\n]*/, '');
code = code.replace(/[\s\n]*$/, '');
level = 0;
var session = editor.getSession();
session.setValue(code);
@@ -596,7 +926,7 @@ function finishTabifier(code) {
function cleanCStyle(code) {
var i = 0;
code = code.replace(/\)\n[\s]*/g,')\n '); //single line if while for
code = code.replace(/\)\n[\s]*/g,')\n ');
function cleanAsync() {
var iStart = i;
for (; i < code.length && i < iStart + LOOP_SIZE; i++) {
@@ -616,8 +946,7 @@ function cleanCStyle(code) {
}
out += c;
} else if (instring) {
if (instring == c && // this string closes at the next matching quote
// unless it was escaped, or the escape is escaped
if (instring == c &&
('\\' != code.charAt(i - 1) || '\\' == code.charAt(i - 2))
) {
instring = false;
@@ -678,9 +1007,9 @@ function cleanCStyle(code) {
}
}
code = code.replace(/^[\s\n]*/, ''); //leading space
code = code.replace(/[\s\n]*$/, ''); //trailing space
code = code.replace(/[\n\r]+/g, '\n'); //collapse newlines
code = code.replace(/^[\s\n]*/, '');
code = code.replace(/[\s\n]*$/, '');
code = code.replace(/[\n\r]+/g, '\n');
var out = tabs(), li = level, c = '';
var infor = false, forcount = 0, instring = false, incomment = false;
@@ -691,14 +1020,10 @@ function tabs() {
for (var j = 0; j < level; j++) s += '\t';
return s;
}
// Functions
function formatCode() {
var session = editor.getSession();
cleanCStyle(session.getValue());
}
</script>
<?php }?>