-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathstep3.html
More file actions
257 lines (237 loc) · 10.4 KB
/
Copy pathstep3.html
File metadata and controls
257 lines (237 loc) · 10.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>欢迎使用</title>
<link rel="stylesheet" type="text/css" href="static/css/step.css"/>
<link rel="stylesheet" type="text/css" href="static/css/base.css"/>
<link rel="stylesheet" type="text/css" href="static/css/banneralert.css"/>
<link rel="stylesheet" type="text/css" href="static/css/bootstrap.min.css"/>
<script src="static/js/jquery-1.11.0.min.js"></script>
<script src="static/js/banneralert.min.js"></script>
<script src="static/js/bootstrap.js"></script>
<script src="static/js/main.js"></script>
<script>
var config = null;
var oTable = null;
var chooser = null;
var preBtn = null;
var saveBtn = null;
var nextBtn = null;
var infileName = [];
var outfileName = [];
var datafilesPath = null;
function addRow(){
// 文件个数校验
if(infileName.length != outfileName.length){
alert("输入文件个数与输出文件个数不一致!");
return;
}
if(infileName.length == 0) return;
// 按名称排一下序
infileName.sort();
outfileName.sort();
// 将原来的table元素删掉
removeClass(oTable, "hidden");
var len = oTable.rows.length;
for(var i = len - 1; i > 0; i--)
oTable.deleteRow(i);
// 重新生成table
len = infileName.length;
var aveInt = Math.floor(100 / len);
for(var i = 0; i < len; i++){
var oTr = oTable.insertRow();
var oTd0 = oTr.insertCell(-1);
oTd0.innerHTML = i;
var oTd1 = oTr.insertCell(-1);
oTd1.innerHTML = infileName[i];
var oTd2 = oTr.insertCell(-1);
oTd2.innerHTML = outfileName[i];
if(infileName[i].split('.')[0] != outfileName[i].split('.')[0]){
alert("输入输出文件的文件名称不一致, 请检查!");
oTr.className = "danger";
}
if(i == len - 1) aveInt = (100 - aveInt * (len - 1));
if(datafilesPath == PROBLEM_DATA_ROOT_PATH)
aveInt = config.datascore[infileName[i].split('.')[0]];
var oTd3 = oTr.insertCell(-1);
oTd3.innerHTML = "<input class='form-control' type='text' value = '"+ aveInt +"'/>";
}
}
function apendText(text) {
var name = text.split('.');
if(name.length == 2){
if(name[1] == 'in') infileName[infileName.length] = text;
else if(name[1] == 'out') outfileName[outfileName.length] = text;
else alert(text + "文件命名格式错误!");
}else alert(text + "文件命名格式错误!");
}
function checkChange(){
var flag = true;
if(config.datacount != infileName.length) flag = false;
else{
for(var i = 0; i < config.datacount; i++){
if(config.datascore[infileName[i].split('.')[0]] != oTable.rows[i+1].cells[3].firstChild.value) flag = false;
}
}
if(datafilesPath != null && datafilesPath != PROBLEM_DATA_ROOT_PATH) flag = false;
if(!flag) return confirm("您做了更改且没有保存, 离开后更改将会失效, 确认离开?");
else return true;
}
function checkAvail(){
var sum = 0;
var err_message = "";
for(var i = 0; i < infileName.length; i++){
var oTr = oTable.rows[i+1];
var flag = true;
if(oTr.cells[1].innerHTML.split('.')[0] != oTr.cells[2].innerHTML.split('.')[0]){
flag = false;
err_message += "表格第"+ (i+1) +"行的输入输出文件名称不一致,请检查<br/>";
}
if(isNaN(oTable.rows[i+1].cells[3].firstChild.value)){
flag = false;
err_message += "表格第"+ (i+1) +"行的测试用例分值不是一个整数,请检查<br/>";
}else sum += Number(oTable.rows[i+1].cells[3].firstChild.value);
if(!flag){
removeClass(oTr, "success");
addClass(oTr, "danger");
}else{
removeClass(oTr, "danger");
addClass(oTr, "success");
}
}
if(sum != 100){
err_message += "所有测试用例的总分不为100, 请重新设定";
}
if(err_message){
showBanner("错误", err_message, "alert-danger");
return false;
}else{
return true;
}
}
function saveFunc(){
if(checkAvail()){
err_message = "";
var len = infileName.length;
config.datacount = len;
config.datascore = {};
for(var i = 0; i < len; i++){
config.datascore[infileName[i].split('.')[0]] = Number(oTable.rows[i+1].cells[3].firstChild.value);
}
var cnt = 0;
saveDataFiles(config, datafilesPath, function success(){
cnt = cnt + 1;
}, function error(err){
cnt = cnt + 1;
removeClass(oTable.rows[cnt], "success");
addClass(oTable.rows[cnt], "danger");
err_message += "第" + cnt +"个测试用例保存失败!<br/>";
showBanner("错误", err_message, "alert-danger");
});
if(!err_message){
showBanner("保存成功", "", "alert-success");
datafilesPath = PROBLEM_DATA_ROOT_PATH;
}
}
}
function initData(){
infileName.length = 0;
outfileName.length = 0;
datafilesPath = PROBLEM_DATA_ROOT_PATH;
preBtn = document.getElementById("preBtn");
saveBtn = document.getElementById("saveBtn");
nextBtn = document.getElementById("nextBtn");
chooser = document.querySelector('#fileupload');
oTable = document.getElementById('testCaseTable');
preBtn.onclick = nextBtn.onclick = function(){
return checkChange();
}
saveBtn.onclick = function(){
saveFunc();
}
chooser.addEventListener("change", function(evt){
var files = this.files;
var filesPath = files[0].path;
infileName.length = 0;
outfileName.length = 0;
datafilesPath = filesPath;
getFiles(filesPath, apendText, addRow);
}, false);
getDataFiles(apendText, addRow, function(err){
alert(err);
});
};
window.onload=function(){
initStep();
getConfig(function success(data){
config = data;
initData();
}, function error(err){
alert(err);
});
}
</script>
</head>
<body>
<div class = "body-container">
<div class="dHead">
<div class="navbar-wrapper maintitle" role="navigation">
<h1>南京理工大学程序设计能力评测系统题目打包程序</h1>
</div>
<div class="six steps large step-navbar">
<span name = "stepBtn" class="step">开始</span>
<span name = "stepBtn" class="step">题目基本信息</span>
<span name = "stepBtn" class="step">编辑题目内容</span>
<span name = "stepBtn" class="step active">添加测试用例</span>
<span name = "stepBtn" class="step">添加题解</span>
<span name = "stepBtn" class="step">完成确认</span>
</div>
</div>
<div class="dBody">
<div class="col-md-6 col-md-offset-3">
<div class="subhead">添加测试用例<a class="glyphicon glyphicon-question-sign helpText" href="help.html#problemTestcase" target="_blank"></a></div>
<div class="pull-right">
<span class="btn btn-default fileinput-button">
<span class="glyphicon glyphicon-folder-open" aria-hidden="true"> 选择文件夹</span>
<input id="fileupload" type="file" nwdirectory />
</span>
</div>
<table id="testCaseTable" class="table table-hover hidden">
<thead>
<tr>
<th> <p style="display:inline">编号</p> </th>
<th> <p style="display:inline">输入数据文件</p> </th>
<th> <p style="display:inline">输出数据文件</p> </th>
<th> <p style="display:inline">测试用例分值</p> </th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<div class="dBtn">
<div class="preStepBtn">
<a class="btn btn-success" href="step2.html" role="button" id="preBtn"><span class="glyphicon glyphicon-chevron-left" aria-hidden="true">上一步</span></a>
</div>
<div class="saveStepBtn">
<button class="btn btn-info" id="saveBtn">保存 <span class="glyphicon glyphicon glyphicon-floppy-save" aria-hidden="true"></span></button>
</div>
<div class="nextStepBtn">
<a class="btn btn-success" href="step4.html" role="button" id="nextBtn">下一步<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span></a>
</div>
</div>
</div>
<div class="footer">
<img class="pull-right" width="64px" height="64px" src="static/images/ICPC-Logo-Fishead.png">
<div class="footer-text">
<small class="pull-right">南京理工大学程序设计能力评测系统题目打包程序</small><br>
<p class="footer-p">
<small class="pull-right">版权所有 © 2014<script>new Date().getFullYear()>2010&&document.write("-"+new Date().getFullYear());</script>, 南京理工大学FishTeam开发组,保留一切权利</small>
</p>
</div>
</div>
</body>
</html>