You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 lines
6.6 KiB

8 years ago
<%
this.title = '测试数据';
function getIcon(filename) {
let a = {
'.cpp': 'file code outline',
'.c': 'file code outline',
'.cs': 'file code outline',
'.pas': 'file code outline',
'.py': 'file code outline',
'.js': 'file code outline',
'.java': 'file code outline',
'.hs': 'file code outline',
'.vala': 'file code outline',
'.lua': 'file code outline',
'.rb': 'file code outline',
'.vb': 'file code outline',
'.ml': 'file code outline',
'.in': 'file text outline',
'.out': 'file text outline',
'.ans': 'file text outline',
'.txt': 'file text outline',
'.md': 'file text outline',
'.md': 'file text outline',
'.docx': 'file word outline',
'.odt': 'file word outline',
'.xlsx': 'file excel outline',
'.ods': 'file excel outline',
'.pptx': 'file powerpoint outline',
'.odp': 'file powerpoint outline',
'.zip': 'file archive outline',
'.7z': 'file archive outline',
}
for (let x in a) if (filename.endsWith(x)) return a[x];
return 'file outline';
}
8 years ago
%>
<% include header %>
<div class="padding">
<div class="ui grid">
<div class="seven wide column">
<h3 style="text-align: center; ">测试点信息</h3>
<% include problem_testcases %>
</div>
<div class="nine wide column">
<h3 style="text-align: center; ">文件列表</h3>
<% if (testdata) { %>
<table class="ui very basic center aligned table">
<thead>
<tr>
<th class="left aligned">文件名</th>
<th style="width: 100px">文件大小</th>
<th style="width: 35px">下载</th>
<% if (problem.allowedEdit) { %>
<th style="width: 35px">删除</th>
<% } %>
</tr>
</thead>
<tbody>
<% if (testdata.zip) { %>
<tr>
<td class="left aligned"><i class="file archive outline icon"></i> 完整数据包</td>
<td><%- !testdata.zip.size ? '<i class="minus icon"></i>' : syzoj.utils.formatSize(testdata.zip.size) %></td>
<td><a style="color: #000; " href="<%= syzoj.utils.makeUrl(['problem', problem.id, 'testdata', 'download']) %>"><i class="download icon"></i></td>
<% if (problem.allowedEdit) { %>
<td><i class="minus icon"></i></td>
<% } %>
</tr>
<% } %>
<% let i = 0; %>
<% if (testdata.files) for (let file of testdata.files) { %>
<% i++; %>
<tr>
<td class="left aligned"><i class="<%= getIcon(file.filename) %> icon"></i> <%= file.filename %></td>
<td><%= syzoj.utils.formatSize(file.size) %></td>
<td>
<a style="color: #000; " href="<%= syzoj.utils.makeUrl(['problem', problem.id, 'testdata', 'download', file.filename]) %>">
<i class="download icon"></i>
</a>
</td>
<% if (problem.allowedEdit) { %>
<td>
<a style="color: #000; " onclick="$('#modal-delete-<%= i %>').modal('show')">
<i class="remove icon"></i>
</a>
<div class="ui basic modal" id="modal-delete-<%= i %>">
<div class="ui icon header">
<i class="trash icon"></i>
<p style="margin-top: 15px; ">删除文件</p>
</div>
<div class="content" style="text-align: center; ">
<p>确认删除「 <samp><%= file.filename %></samp> 」吗?</p>
</div>
<div class="actions">
<div class="ui red basic cancel inverted button">
<i class="remove icon"></i>
</div>
<a class="ui green ok inverted button" href="<%= syzoj.utils.makeUrl(['problem', problem.id, 'testdata', 'delete', file.filename]) %>">
<i class="checkmark icon"></i>
</a>
</div>
</div>
</td>
<% } %>
</tr>
<% } %>
</tbody>
</table>
<% } else { %>
<h4 style="text-align: center; ">无测试数据</h4>
<% } %>
<% if (problem.allowedEdit) { %>
<form id="form_upload" class="ui form" action="<%= syzoj.utils.makeUrl(['problem', problem.id, 'testdata', 'upload']) %>" method="post" enctype="multipart/form-data">
<div class="inline fields">
<div class="field" style="margin: 0 auto; ">
<label for="answer">上传文件(可一次性上传多个)</label>
<input type="file" name="file" multiple id="upload_file">
<div class="ui center aligned vertical segment" style="padding-bottom: 0; ">
<div class="ui button" onclick="check_replace()">提交</div>
<a href="<%= syzoj.utils.makeUrl(['problem', problem.id]) %>" class="ui blue button">返回题目</a>
</div>
</div>
</div>
</form>
<div class="ui basic modal" id="modal-replace">
<div class="ui icon header">
<i class="refresh icon"></i>
<p style="margin-top: 15px; ">替换文件</p>
</div>
<div class="content" style="text-align: center; ">
<p>确认替换以下文件吗?</p>
<div style="display: inline-block; text-align: left; " id="replaced_files"></div>
</div>
<div class="actions">
<div class="ui red basic cancel inverted button">
<i class="remove icon"></i>
</div>
<a class="ui green ok inverted button" onclick="$('#form_upload').submit()">
<i class="checkmark icon"></i>
</a>
</div>
</div>
<script>
function check_replace() {
var old_files = <%- JSON.stringify((testdata && testdata.files ? testdata.files : []).map(x => x.filename)) %>;
var replaced_files = Array.prototype.slice.call($('#upload_file')[0].files).map(function (x) { return x.name; }).filter(function (x) { return old_files.includes(x); });
var s = '';
for (let file of replaced_files) s += '<samp>' + file + '</samp><br>';
if (s) {
$('#replaced_files').html(s);
$('#modal-replace').modal('show');
} else {
$('#form_upload').submit();
}
}
</script>
<% } %>
</div>
</div>
</div>
<% include footer %>