|
|
@ -28,6 +28,9 @@ |
|
|
|
.accordion > .content > .accordion > .content > :last-child { |
|
|
|
.accordion > .content > .accordion > .content > :last-child { |
|
|
|
margin-bottom: -10px !important; |
|
|
|
margin-bottom: -10px !important; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.disabled{ |
|
|
|
|
|
|
|
display: none; |
|
|
|
|
|
|
|
} |
|
|
|
</style> |
|
|
|
</style> |
|
|
|
<span id="submission_content"> |
|
|
|
<span id="submission_content"> |
|
|
|
<div class="padding" id="vueAppFuckSafari"> |
|
|
|
<div class="padding" id="vueAppFuckSafari"> |
|
|
@ -52,7 +55,8 @@ |
|
|
|
<tr is="submission-item" v-bind:data="roughData" :config="displayConfig" :show-rejudge="showRejudge" :show-share="showShare" :progress="getProgress()" :compiling="detailResult && !detailResult.compile"></tr> |
|
|
|
<tr is="submission-item" v-bind:data="roughData" :config="displayConfig" :show-rejudge="showRejudge" :show-share="showShare" :progress="getProgress()" :compiling="detailResult && !detailResult.compile"></tr> |
|
|
|
</tbody> |
|
|
|
</tbody> |
|
|
|
</table> |
|
|
|
</table> |
|
|
|
|
|
|
|
<div id="cid" class="disabled"><%= cid %></div> |
|
|
|
|
|
|
|
<div id="pid" class="disabled"><%= pid %></div> |
|
|
|
<code-box no-escape v-bind:content="code"> |
|
|
|
<code-box no-escape v-bind:content="code"> |
|
|
|
<% if (formattedCode !== null) { %> |
|
|
|
<% if (formattedCode !== null) { %> |
|
|
|
<a onclick="toggleFormattedCode()" class="ui button" style="position: absolute; top: 0px; right: -4px; border-top-left-radius: 0; border-bottom-right-radius: 0; "> |
|
|
|
<a onclick="toggleFormattedCode()" class="ui button" style="position: absolute; top: 0px; right: -4px; border-top-left-radius: 0; border-bottom-right-radius: 0; "> |
|
|
@ -311,11 +315,10 @@ const vueApp = new Vue({ |
|
|
|
$('.ui.accordion').off().accordion({ selector: { trigger: '.title:not(.unexpandable)' } }); |
|
|
|
$('.ui.accordion').off().accordion({ selector: { trigger: '.title:not(.unexpandable)' } }); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
console.log(token); |
|
|
|
|
|
|
|
if (token != null) { |
|
|
|
if (token != null) { |
|
|
|
const loadSocketIO = function () { |
|
|
|
const loadSocketIO = function () { |
|
|
|
const cid = <%= cid%>; |
|
|
|
const cid = parseInt(document.getElementById('cid').innerHTML); |
|
|
|
const pid = <%= pid%>; |
|
|
|
const pid = parseInt(document.getElementById('pid').innerHTML); |
|
|
|
let currentVersion = 0; |
|
|
|
let currentVersion = 0; |
|
|
|
const socket = io(socketUrl); |
|
|
|
const socket = io(socketUrl); |
|
|
|
socket.on('connect', function () { |
|
|
|
socket.on('connect', function () { |
|
|
@ -342,7 +345,7 @@ if (token != null) { |
|
|
|
vueApp.roughData.result = p.roughResult; |
|
|
|
vueApp.roughData.result = p.roughResult; |
|
|
|
if (p.roughResult.result === 'Accepted') { |
|
|
|
if (p.roughResult.result === 'Accepted') { |
|
|
|
$.ajax({ |
|
|
|
$.ajax({ |
|
|
|
url: `/api/practice/pass/${cid}/${pid}`, |
|
|
|
url: `/api/pass/${cid}/${pid}`, |
|
|
|
type: 'GET', |
|
|
|
type: 'GET', |
|
|
|
success: function (data) { |
|
|
|
success: function (data) { |
|
|
|
}, |
|
|
|
}, |
|
|
@ -352,7 +355,7 @@ if (token != null) { |
|
|
|
}); |
|
|
|
}); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
$.ajax({ |
|
|
|
$.ajax({ |
|
|
|
url: `/api/practice/nopass/${cid}/${pid}`, |
|
|
|
url: `/api/nopass/${cid}/${pid}`, |
|
|
|
type: 'GET', |
|
|
|
type: 'GET', |
|
|
|
success: function (data) { |
|
|
|
success: function (data) { |
|
|
|
}, |
|
|
|
}, |
|
|
@ -366,12 +369,42 @@ if (token != null) { |
|
|
|
}); |
|
|
|
}); |
|
|
|
socket.emit('join', token, function (data) { |
|
|
|
socket.emit('join', token, function (data) { |
|
|
|
console.log("join! ", data); |
|
|
|
console.log("join! ", data); |
|
|
|
|
|
|
|
// data.ok=true; |
|
|
|
|
|
|
|
// data.finished=true; |
|
|
|
|
|
|
|
// data.roughResult = { |
|
|
|
|
|
|
|
// memory: 7128, |
|
|
|
|
|
|
|
// result: "Accepted", |
|
|
|
|
|
|
|
// score: 100, |
|
|
|
|
|
|
|
// time: 272, |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
// data.running=false; |
|
|
|
if (data && data.ok) { |
|
|
|
if (data && data.ok) { |
|
|
|
if (data.finished) { |
|
|
|
if (data.finished) { |
|
|
|
vueApp.roughData.result = data.roughResult; |
|
|
|
vueApp.roughData.result = data.roughResult; |
|
|
|
// if (!data.result) location.reload(true); |
|
|
|
// if (!data.result) location.reload(true); |
|
|
|
vueApp.detailResult = data.result; |
|
|
|
vueApp.detailResult = data.result; |
|
|
|
vueApp.roughData.running = false; |
|
|
|
vueApp.roughData.running = false; |
|
|
|
|
|
|
|
// if (data.roughResult.result === 'Accepted') { |
|
|
|
|
|
|
|
// $.ajax({ |
|
|
|
|
|
|
|
// url: `/api/pass/${cid}/${pid}`, |
|
|
|
|
|
|
|
// type: 'GET', |
|
|
|
|
|
|
|
// success: function (data) { |
|
|
|
|
|
|
|
// }, |
|
|
|
|
|
|
|
// error: function (XMLHttpRequest, textStatus, errorThrown) { |
|
|
|
|
|
|
|
// alert('练习功能发生故障'); |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
// }); |
|
|
|
|
|
|
|
// } else { |
|
|
|
|
|
|
|
// $.ajax({ |
|
|
|
|
|
|
|
// url: `/api/nopass/${cid}/${pid}`, |
|
|
|
|
|
|
|
// type: 'GET', |
|
|
|
|
|
|
|
// success: function (data) { |
|
|
|
|
|
|
|
// }, |
|
|
|
|
|
|
|
// error: function (XMLHttpRequest, textStatus, errorThrown) { |
|
|
|
|
|
|
|
// alert('练习功能发生故障'); |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
// }); |
|
|
|
|
|
|
|
// } |
|
|
|
socket.close(); |
|
|
|
socket.close(); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
if (data.running) { |
|
|
|
if (data.running) { |
|
|
|