mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 16:33:22 +00:00
Merge branch 'dev' of git.coding.net:virusdefender/qduoj into dev
This commit is contained in:
commit
068513b451
@ -9,3 +9,4 @@ gunicorn
|
|||||||
coverage
|
coverage
|
||||||
django-extensions
|
django-extensions
|
||||||
supervisor
|
supervisor
|
||||||
|
pillow
|
BIN
static/src/img/ZeroClipboard.swf
Executable file
BIN
static/src/img/ZeroClipboard.swf
Executable file
Binary file not shown.
BIN
static/src/img/favicon.ico
Normal file
BIN
static/src/img/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
@ -1,7 +1,7 @@
|
|||||||
require(["jquery", "bsAlert", "csrfToken", "validator"], function ($, bsAlert, csrfTokenHeader) {
|
require(["jquery", "bsAlert", "csrfToken", "validator"], function ($, bsAlert, csrfTokenHeader) {
|
||||||
|
|
||||||
function refresh_captcha(){
|
function refresh_captcha(){
|
||||||
this.src = "/captcha/?" + Math.random();
|
$("#captcha-img")[0].src = "/captcha/?" + Math.random();
|
||||||
$("#captcha")[0].value = "";
|
$("#captcha")[0].value = "";
|
||||||
}
|
}
|
||||||
$("#captcha-img").click(function(){
|
$("#captcha-img").click(function(){
|
||||||
|
@ -1,183 +1,189 @@
|
|||||||
require(["jquery", "codeMirror", "csrfToken", "bsAlert"], function ($, codeMirror, csrfTokenHeader, bsAlert) {
|
require(["jquery", "codeMirror", "csrfToken", "bsAlert", "ZeroClipboard"],
|
||||||
var codeEditorSelector = $("#code-editor")[0];
|
function ($, codeMirror, csrfTokenHeader, bsAlert, ZeroClipboard) {
|
||||||
// 部分界面逻辑会隐藏代码输入框,先判断有没有。
|
var codeEditorSelector = $("#code-editor")[0];
|
||||||
if (codeEditorSelector == undefined) {
|
// 部分界面逻辑会隐藏代码输入框,先判断有没有。
|
||||||
return;
|
if (codeEditorSelector == undefined) {
|
||||||
}
|
|
||||||
var codeEditor = codeMirror(codeEditorSelector, "text/x-csrc");
|
|
||||||
var language = $("input[name='language'][checked]").val();
|
|
||||||
var submissionId;
|
|
||||||
|
|
||||||
$("input[name='language']").change(function () {
|
|
||||||
language = this.value;
|
|
||||||
var languageTypes = {"1": "text/x-csrc", "2": "text/x-c++src", "3": "text/x-java"};
|
|
||||||
codeEditor.setOption("mode", languageTypes[language]);
|
|
||||||
});
|
|
||||||
|
|
||||||
$("#show-more-btn").click(function () {
|
|
||||||
$(".hide").attr("class", "problem-section");
|
|
||||||
$("#show-more-btn").hide();
|
|
||||||
});
|
|
||||||
|
|
||||||
function showLoading() {
|
|
||||||
$("#submit-code-button").attr("disabled", "disabled");
|
|
||||||
$("#loading-gif").show();
|
|
||||||
}
|
|
||||||
|
|
||||||
function hideLoading() {
|
|
||||||
$("#submit-code-button").removeAttr("disabled");
|
|
||||||
$("#loading-gif").hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
function getResultHtml(data) {
|
|
||||||
// 0 结果正确 1 运行错误 2 超时 3 超内存 4 编译错误
|
|
||||||
// 5 格式错误 6 结果错误 7 系统错误 8 等待判题
|
|
||||||
var results = {
|
|
||||||
0: {"alert_class": "success", message: "Accepted"},
|
|
||||||
1: {"alert_class": "danger", message: "Runtime Error"},
|
|
||||||
2: {"alert_class": "warning", message: "Time Limit Exceeded"},
|
|
||||||
3: {"alert_class": "warning", message: "Memory Limit Exceeded"},
|
|
||||||
4: {"alert_class": "danger", message: "Compile Error"},
|
|
||||||
5: {"alert_class": "warning", message: "Format Error"},
|
|
||||||
6: {"alert_class": "danger", message: "Wrong Answer"},
|
|
||||||
7: {"alert_class": "danger", message: "System Error"},
|
|
||||||
8: {"alert_class": "info", message: "Waiting"}
|
|
||||||
};
|
|
||||||
|
|
||||||
var html = '<div class="alert alert-' +
|
|
||||||
results[data.result].alert_class + ' result"' +
|
|
||||||
' role="alert">' +
|
|
||||||
'<div class="alert-link">' +
|
|
||||||
results[data.result].message +
|
|
||||||
'! ';
|
|
||||||
if (!data.result) {
|
|
||||||
html += "CPU time: " + data.accepted_answer_time + "ms ";
|
|
||||||
}
|
|
||||||
html += ('<a href="/submission/' + submissionId + '/" target="_blank">查看详情</a></div> </div>');
|
|
||||||
|
|
||||||
return html;
|
|
||||||
}
|
|
||||||
|
|
||||||
var counter = 0;
|
|
||||||
|
|
||||||
function getResult() {
|
|
||||||
if (counter++ > 10) {
|
|
||||||
hideLoading();
|
|
||||||
bsAlert("抱歉,服务器可能出现了故障,请稍后到我的提交列表中查看");
|
|
||||||
counter = 0;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 提供点击复制到剪切板的功能
|
||||||
|
ZeroClipboard.config({swfPath: "/static/img/ZeroClipboard.swf"});
|
||||||
|
new ZeroClipboard($(".copy-sample"));
|
||||||
|
|
||||||
|
var codeEditor = codeMirror(codeEditorSelector, "text/x-csrc");
|
||||||
|
var language = $("input[name='language'][checked]").val();
|
||||||
|
var submissionId;
|
||||||
|
|
||||||
|
$("input[name='language']").change(function () {
|
||||||
|
language = this.value;
|
||||||
|
var languageTypes = {"1": "text/x-csrc", "2": "text/x-c++src", "3": "text/x-java"};
|
||||||
|
codeEditor.setOption("mode", languageTypes[language]);
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#show-more-btn").click(function () {
|
||||||
|
$(".hide").attr("class", "problem-section");
|
||||||
|
$("#show-more-btn").hide();
|
||||||
|
});
|
||||||
|
|
||||||
|
function showLoading() {
|
||||||
|
$("#submit-code-button").attr("disabled", "disabled");
|
||||||
|
$("#loading-gif").show();
|
||||||
|
}
|
||||||
|
|
||||||
|
function hideLoading() {
|
||||||
|
$("#submit-code-button").removeAttr("disabled");
|
||||||
|
$("#loading-gif").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getResultHtml(data) {
|
||||||
|
// 0 结果正确 1 运行错误 2 超时 3 超内存 4 编译错误
|
||||||
|
// 5 格式错误 6 结果错误 7 系统错误 8 等待判题
|
||||||
|
var results = {
|
||||||
|
0: {"alert_class": "success", message: "Accepted"},
|
||||||
|
1: {"alert_class": "danger", message: "Runtime Error"},
|
||||||
|
2: {"alert_class": "warning", message: "Time Limit Exceeded"},
|
||||||
|
3: {"alert_class": "warning", message: "Memory Limit Exceeded"},
|
||||||
|
4: {"alert_class": "danger", message: "Compile Error"},
|
||||||
|
5: {"alert_class": "warning", message: "Format Error"},
|
||||||
|
6: {"alert_class": "danger", message: "Wrong Answer"},
|
||||||
|
7: {"alert_class": "danger", message: "System Error"},
|
||||||
|
8: {"alert_class": "info", message: "Waiting"}
|
||||||
|
};
|
||||||
|
|
||||||
|
var html = '<div class="alert alert-' +
|
||||||
|
results[data.result].alert_class + ' result"' +
|
||||||
|
' role="alert">' +
|
||||||
|
'<div class="alert-link">' +
|
||||||
|
results[data.result].message +
|
||||||
|
'! ';
|
||||||
|
if (!data.result) {
|
||||||
|
html += "CPU time: " + data.accepted_answer_time + "ms ";
|
||||||
|
}
|
||||||
|
html += ('<a href="/submission/' + submissionId + '/" target="_blank">查看详情</a></div> </div>');
|
||||||
|
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
|
var counter = 0;
|
||||||
|
|
||||||
|
function getResult() {
|
||||||
|
if (counter++ > 10) {
|
||||||
|
hideLoading();
|
||||||
|
bsAlert("抱歉,服务器可能出现了故障,请稍后到我的提交列表中查看");
|
||||||
|
counter = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
url: "/api/submission/?submission_id=" + submissionId,
|
||||||
|
method: "get",
|
||||||
|
dataType: "json",
|
||||||
|
success: function (data) {
|
||||||
|
if (!data.code) {
|
||||||
|
// 8是还没有完成判题
|
||||||
|
if (data.data.result == 8) {
|
||||||
|
// 1秒之后重新去获取
|
||||||
|
setTimeout(getResult, 1000);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
counter = 0;
|
||||||
|
hideLoading();
|
||||||
|
$("#result").html(getResultHtml(data.data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bsAlert(data.data);
|
||||||
|
hideLoading();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function guessLanguage(code) {
|
||||||
|
//cpp
|
||||||
|
if (code.indexOf("using namespace std") > -1) {
|
||||||
|
return "2";
|
||||||
|
}
|
||||||
|
//c
|
||||||
|
if (code.indexOf("printf") > -1) {
|
||||||
|
return "1";
|
||||||
|
}
|
||||||
|
//java
|
||||||
|
if (code.indexOf("public class Main")) {
|
||||||
|
return "3";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#submit-code-button").click(function () {
|
||||||
|
|
||||||
|
var code = codeEditor.getValue();
|
||||||
|
|
||||||
|
if (!code.trim()) {
|
||||||
|
bsAlert("请填写代码!");
|
||||||
|
hideLoading();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (guessLanguage(code) != language) {
|
||||||
|
if (!confirm("您选择的代码语言可能存在错误,是否继续提交?")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (location.href.indexOf("contest") > -1) {
|
||||||
|
var problemId = location.pathname.split("/")[4];
|
||||||
|
var contestId = location.pathname.split("/")[2];
|
||||||
|
var url = "/api/contest/submission/";
|
||||||
|
var data = {
|
||||||
|
problem_id: problemId,
|
||||||
|
language: language,
|
||||||
|
code: code,
|
||||||
|
contest_id: contestId
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var problemId = window.location.pathname.split("/")[2];
|
||||||
|
var url = "/api/submission/";
|
||||||
|
var data = {
|
||||||
|
problem_id: problemId,
|
||||||
|
language: language,
|
||||||
|
code: code
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
showLoading();
|
||||||
|
|
||||||
|
$("#result").html("");
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
beforeSend: csrfTokenHeader,
|
||||||
|
url: url,
|
||||||
|
method: "post",
|
||||||
|
data: JSON.stringify(data),
|
||||||
|
contentType: "application/json",
|
||||||
|
success: function (data) {
|
||||||
|
if (!data.code) {
|
||||||
|
submissionId = data.data.submission_id;
|
||||||
|
// 获取到id 之后2秒去查询一下判题结果
|
||||||
|
setTimeout(getResult, 2000);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bsAlert(data.data);
|
||||||
|
hideLoading();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/api/submission/?submission_id=" + submissionId,
|
url: "/api/user/",
|
||||||
method: "get",
|
method: "get",
|
||||||
dataType: "json",
|
dataType: "json",
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
if (!data.code) {
|
if (data.code) {
|
||||||
// 8是还没有完成判题
|
$("#submit-code-button").attr("disabled", "disabled");
|
||||||
if (data.data.result == 8) {
|
$("#result").html('<div class="alert alert-danger" role="alert"><div class="alert-link">请先<a href="/login/" target="_blank">登录</a>!</div> </div>');
|
||||||
// 1秒之后重新去获取
|
|
||||||
setTimeout(getResult, 1000);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
counter = 0;
|
|
||||||
hideLoading();
|
|
||||||
$("#result").html(getResultHtml(data.data));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
bsAlert(data.data);
|
|
||||||
hideLoading();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
|
||||||
|
|
||||||
function guessLanguage(code) {
|
|
||||||
//cpp
|
|
||||||
if (code.indexOf("using namespace std") > -1) {
|
|
||||||
return "2";
|
|
||||||
}
|
|
||||||
//c
|
|
||||||
if (code.indexOf("printf") > -1) {
|
|
||||||
return "1";
|
|
||||||
}
|
|
||||||
//java
|
|
||||||
if (code.indexOf("public class Main")) {
|
|
||||||
return "3";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$("#submit-code-button").click(function () {
|
|
||||||
|
|
||||||
var code = codeEditor.getValue();
|
|
||||||
|
|
||||||
if (!code.trim()) {
|
|
||||||
bsAlert("请填写代码!");
|
|
||||||
hideLoading();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(guessLanguage(code) != language){
|
|
||||||
if(!confirm("您选择的代码语言可能存在错误,是否继续提交?")){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (location.href.indexOf("contest") > -1) {
|
|
||||||
var problemId = location.pathname.split("/")[4];
|
|
||||||
var contestId = location.pathname.split("/")[2];
|
|
||||||
var url = "/api/contest/submission/";
|
|
||||||
var data = {
|
|
||||||
problem_id: problemId,
|
|
||||||
language: language,
|
|
||||||
code: code,
|
|
||||||
contest_id: contestId
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var problemId = window.location.pathname.split("/")[2];
|
|
||||||
var url = "/api/submission/";
|
|
||||||
var data = {
|
|
||||||
problem_id: problemId,
|
|
||||||
language: language,
|
|
||||||
code: code
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
showLoading();
|
|
||||||
|
|
||||||
$("#result").html("");
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
beforeSend: csrfTokenHeader,
|
|
||||||
url: url,
|
|
||||||
method: "post",
|
|
||||||
data: JSON.stringify(data),
|
|
||||||
contentType: "application/json",
|
|
||||||
success: function (data) {
|
|
||||||
if (!data.code) {
|
|
||||||
submissionId = data.data.submission_id;
|
|
||||||
// 获取到id 之后2秒去查询一下判题结果
|
|
||||||
setTimeout(getResult, 2000);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
bsAlert(data.data);
|
|
||||||
hideLoading();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: "/api/user/",
|
|
||||||
method: "get",
|
|
||||||
dataType: "json",
|
|
||||||
success: function (data) {
|
|
||||||
if (data.code) {
|
|
||||||
$("#submit-code-button").attr("disabled", "disabled");
|
|
||||||
$("#result").html('<div class="alert alert-danger" role="alert"><div class="alert-link">请先<a href="/login/" target="_blank">登录</a>!</div> </div>');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
@ -20,6 +20,7 @@ var require = {
|
|||||||
bootstrap: "lib/bootstrap/bootstrap",
|
bootstrap: "lib/bootstrap/bootstrap",
|
||||||
datetimePicker: "lib/datetime_picker/bootstrap-datetimepicker.zh-CN",
|
datetimePicker: "lib/datetime_picker/bootstrap-datetimepicker.zh-CN",
|
||||||
validator: "lib/validator/validator",
|
validator: "lib/validator/validator",
|
||||||
|
ZeroClipboard: "lib/ZeroClipboard/ZeroClipboard",
|
||||||
|
|
||||||
|
|
||||||
// ------ 下面写的都不要直接用,而是使用上面的封装版本 ------
|
// ------ 下面写的都不要直接用,而是使用上面的封装版本 ------
|
||||||
|
2610
static/src/js/lib/ZeroClipboard/ZeroClipboard.js
Executable file
2610
static/src/js/lib/ZeroClipboard/ZeroClipboard.js
Executable file
File diff suppressed because it is too large
Load Diff
@ -6,6 +6,7 @@
|
|||||||
<title>青岛大学在线评测平台 - 首页</title>
|
<title>青岛大学在线评测平台 - 首页</title>
|
||||||
|
|
||||||
<link rel="stylesheet" type="text/css" href="/static/css/fullpage/jquery.fullPage.css">
|
<link rel="stylesheet" type="text/css" href="/static/css/fullpage/jquery.fullPage.css">
|
||||||
|
<link rel="shortcut icon" href="/static/img/favicon.ico">
|
||||||
<style>
|
<style>
|
||||||
html, textarea, input, option, select, button {
|
html, textarea, input, option, select, button {
|
||||||
font: 1em "Helvetica Neue", Helvetica, "Lantinghei SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑",
|
font: 1em "Helvetica Neue", Helvetica, "Lantinghei SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑",
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
{% for item in samples %}
|
{% for item in samples %}
|
||||||
<div class="problem-section">
|
<div class="problem-section">
|
||||||
<label class="problem-label">样例输入{{ forloop.counter }}</label>
|
<label class="problem-label">样例输入{{ forloop.counter }}</label>
|
||||||
|
<a href="javascript:void(0)" class="copy-sample" data-clipboard-text="{{ item.input }}">复制</a>
|
||||||
<pre>
|
<pre>
|
||||||
{{ item.input }}</pre>
|
{{ item.input }}</pre>
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="renderer" content="webkit">
|
<meta name="renderer" content="webkit">
|
||||||
|
<link rel="shortcut icon" href="/static/img/favicon.ico">
|
||||||
|
|
||||||
<title>在线评测系统</title>
|
<title>在线评测系统</title>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user