|
|
|
<script>
|
|
|
|
const iconList = {
|
|
|
|
'Accepted': 'checkmark',
|
|
|
|
'Wrong Answer': 'remove',
|
|
|
|
'Runtime Error': 'bomb',
|
|
|
|
'Invalid Interaction': 'ban',
|
|
|
|
'Time Limit Exceeded': 'clock',
|
|
|
|
'Memory Limit Exceeded': 'microchip',
|
|
|
|
'Output Limit Exceeded': 'print',
|
|
|
|
'File Error': 'file outline',
|
|
|
|
'Waiting': 'hourglass half',
|
|
|
|
'Running': 'spinner',
|
|
|
|
'Compiling': 'spinner',
|
|
|
|
'Judging': 'spinner',
|
|
|
|
'Compile Error': 'code',
|
|
|
|
'Submitted': 'checkmark', // NOI contests
|
|
|
|
'System Error': 'server',
|
|
|
|
'No Testdata': 'folder open outline',
|
|
|
|
'Partially Correct': 'minus',
|
|
|
|
'Judgement Failed': 'server',
|
|
|
|
'Skipped': 'fast forward',
|
|
|
|
'Unknown': 'question circle'
|
|
|
|
};
|
|
|
|
Vue.component('status-label', {
|
|
|
|
template: '#statusIconTemplate',
|
|
|
|
props: ['status', 'indetail', 'progress'],
|
|
|
|
computed: {
|
|
|
|
icon() {
|
|
|
|
var x = this.status.startsWith('Running') ? 'Running' : this.status;
|
|
|
|
if (x in iconList) {
|
|
|
|
return iconList[x];
|
|
|
|
} else {
|
|
|
|
return 'question circle';
|
|
|
|
}
|
|
|
|
},
|
|
|
|
colorClass() {
|
|
|
|
var x = this.status.startsWith('Running') ? 'Running' : this.status;
|
|
|
|
return (this.indetail ? 'status_detail ' : '') + x.toLowerCase().split(' ').join('_');
|
|
|
|
},
|
|
|
|
displayStatus() {
|
|
|
|
return this.status.startsWith('Running') ? 'Running' : this.status;
|
|
|
|
},
|
|
|
|
getProgress() {
|
|
|
|
if (this.status.startsWith('Running ')) {
|
|
|
|
var tmp = this.status.split(' ')[1].trim().split('/');
|
|
|
|
return { total: tmp[1], finished: tmp[0] };
|
|
|
|
}
|
|
|
|
return this.progress;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
</script>
|
|
|
|
<script type="text/x-template" id="statusIconTemplate">
|
|
|
|
<span class="status" :class="colorClass">
|
|
|
|
<i class="icon" :class="icon"></i>
|
|
|
|
<template v-if="['Running', 'Waiting'].includes(displayStatus) && getProgress && getProgress.total">
|
|
|
|
<span style="text-align: left; display: inline-block; width: 58px; ">{{ displayStatus }}</span>{{getProgress.finished }}/{{ getProgress.total }}
|
|
|
|
</template>
|
|
|
|
<template v-else>
|
|
|
|
{{ displayStatus }}
|
|
|
|
</template>
|
|
|
|
</span>
|
|
|
|
</script>
|