SDUVJ开发实录(六):contest、submit以及其他界面
来源:互联网 发布:sql中查询的功能节点 编辑:程序博客网 时间:2024/06/15 06:08
contest系统主要借用了原SDUOJ的界面系统。不过addcontest在原oj没有提供给用户权限,还是需要重新设计。
{% extends "base.html" %} {% block title %}{{ contest.name }}{% endblock %} {% block navbar %}{% include "include/navbar-contest.html" %}{% endblock %} {% block header %} <h1 class="text-center text-info">{{ contest.name }}</h1> <ul class="text-center" style="list-style:none;"> <li>Start Time: {{ contest.start_time }} Duration Time: {{ contest.duration_time }}</li> <li id="current">Current Time: 1970-01-01 00:00:00</li> </ul> <div id="current2" style="width: 0%; text-align: right; float; left;"><span></span></div> <div class="progress"> <div class="progress-bar progress-bar-success " role="progressbar" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100" id ="progress" style="width:0%"> </div> </div> <script type="text/javascript"> function getServerTime(){ // return new Date() return new Date($.ajax({async: false}).getResponseHeader("Date")); // var xmlHttp = false; // try { // xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); // } catch (e) { // try { // xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); // } catch (e2) { // xmlHttp = false; // } // } // if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { // xmlHttp = new XMLHttpRequest(); // } // xmlHttp.open("GET", window.location.href.toString(), false); // xmlHttp.setRequestHeader("Range", "bytes=-1"); // xmlHttp.send(null); // var severtime=new Date(xmlHttp.getResponseHeader("Date")); // return severtime } var start; var duration; var current; var servertime; $(document).ready(function () { $.ajax({ type: "post", url: "/contest/" + {{ contest.id }} + "/time/", dataType: "json", success: function(data){ start=new Date(data.start); duration=data.duration; syncServerTime(); setInterval(function(){syncServerTime();},1000*60); setInterval(function(){refreshtime(start);},1000); } }); }); function str_pad_left(string,pad,length) { return (new Array(length+1).join(pad)+string).slice(-length); } function secondsToTime(secs) { var hours = Math.floor(secs / (60 * 60)); var divisor_for_minutes = secs % (60 * 60); var minutes = Math.floor(divisor_for_minutes / 60); var divisor_for_seconds = divisor_for_minutes % 60; var seconds = Math.ceil(divisor_for_seconds); return hours + ":" + str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);; } function syncServerTime(){ servertime=getServerTime(); current=servertime; } function refreshtime(start){ var tmpTime = current.getTime(); current.setTime(tmpTime+1000); var elapsed; elapsed=(current-start.getTime())/1000; var cutdown; cutdown=duration-elapsed; var elapsedrate; elapsedrate2=(elapsed/duration+0.01)*100+"%" elapsedrate=(elapsed/duration)*100+"%"; var cutdowntime= secondsToTime(cutdown); $("#current").html("Current Time: "+current); if(elapsed>duration){ $("#current2").html("<span></span>"); $("#current2").css("width", "101%"); $("#progress").css("width", "100%"); } else if(elapsed<0){ $("#current2").html("<span>-"+(secondsToTime(-elapsed))+"</span>"); $("#current2").css("width", "1%"); $("#progress").css("width", "0%"); } else { $("#current2").html("<span>"+cutdowntime+"</span>"); $("#current2").css("width", elapsedrate2); $("#progress").css("width", elapsedrate); } if(elapsed==0){ parent.location.reload(); } } </script> {% endblock %} {% block content %} <div class="tabbable" id="contest_content"> <ul class="nav nav-tabs"> <li class="active"> <a data-toggle="tab" href="#panel-overview" id="overview">Overview</a> </li> <li id="Contest_Problem"> <a data-toggle="tab" href="#panel-problem" id="problem_detail">Problem</a> </li> <li> <a data-toggle="tab" href="#panel-status" id="get_status">Status</a> </li> <li> <a data-toggle="tab" href="#panel-submit">Submit</a> </li> <li> <a data-toggle="tab" href="#panel-rank" id="get_rank">Rank</a> </li> <li> <a data-toggle="tab" href="#panel-clar" id="get_rank">Clarification</a> </li> </ul> <div class="tab-content"> <div class="tab-pane active" id="panel-overview"> {% include "contest/contest_overview.html" %} </div> <div class="tab-pane" id="panel-problem"> {% include "contest/contest_problem.html" %} </div> <div class="tab-pane" id="panel-status"> {% include "contest/contest_status.html" %} </div> <div class="tab-pane" id="panel-rank"> {% include "contest/contest_rank.html" %} </div> <div class="tab-clar" id="panel-clar"> {% include "contest/contest_clar.html" %} </div> </div> </div> <script type="text/javascript"> var start; var duration; $(document).ready(function () { $.ajax({ type: "post", url: "/contest/" + {{ contest.id }} + "/time/", dataType: "json", success: function(data){ start=new Date(data.start); duration=data.duration; // setInterval(function(){refreshtime(start);},1000); } }); $('#get_status').click(function () { // alert("Hello!"); contest_id = {{contest.id}}; $.ajax({ type: 'post', url: "/contest/" + contest_id + "/status/", success: function (responseData) { $('#panel-status').html(responseData); //MathJax.Hub.Queue(["Typeset", MathJax.Hub]); } }) }) $('#get_rank').click(function(){ refreshRankList(); }) $('#submit_button').click(function(){ var current=getServerTime(); var elapsed; elapsed=(current-start.getTime())/1000; if(elapsed>duration){ alert("Contest is Over!"); return false; }else{ $('#submit_form').ajaxForm( $.ajax({ type: 'post', url: "/contest/" + {{ contest.id }} + "/status/", success: function (responseData) { $('#panel-status').html(responseData); $('#overview').tab('show'); } }) ) } }) $('#overview').tab('show'); }) </script> {% endblock %}
阅读全文
0 0
- SDUVJ开发实录(六):contest、submit以及其他界面
- SDUVJ开发实录(三):数据库建立
- SDUVJ开发实录(八):总结
- SDUVJ开发实录(五):Problem等界面的显示优化
- SDUVJ开发实录(二):数据库设计(一)
- SDUVJ开发实录(一):前置知识学习
- SDUVJ开发实录(四):Problem与ProblemList显示
- SDUVJ开发实录(七):rank、contest_rank及其他
- iOS APP跳转设置界面以及设置中的其他界面
- Flex开发包(六)——界面组件
- MFC框架界面开发(六):菜单、工具栏及状态栏
- iPhone开发笔记(一):NavBar+TarBar以及其他
- iPhone开发笔记(一):NavBar+TarBar以及其他
- linux(六)其他常用命令
- Unity leapmotion开发实录(2)
- Unity leapmotion开发实录(3)
- Unity leapmotion开发实录(4)
- Lync(Skype)接口开发实录
- 5月的英语
- STM32系列单片机BOOT设置
- 开始深度学习之旅——caffe安装
- matlab将矩阵写入文件
- 嵌入式项目1--液晶波形实时显示
- SDUVJ开发实录(六):contest、submit以及其他界面
- try-finally-return
- 浏览器兼容性汇总(CSS+js)
- 网络同步之角色名字信息同步
- AndroidStudio添加依赖的代码
- 数据链路层
- 经典排序算法
- (个人)AR电子书系统创新实训第三周(2)
- CGDB的安装与使用