山东大学-VirtualJudge-总结4

在最近这几天,由于我下一步主要工作负责SDUVJ前端的开发以及前段和前端与后台之间的通信,所以在通读对Django框架有了足够的了解之后,主要集中在进一步阅读SDUOJ的源码,希望能够从中借鉴OlineJudge的相关开发经验。

Contest前端####

{% 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-submit">
                {% include "contest/contest_submit.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 %}

Contest问题显示####


<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    jax: ["input/TeX", "output/HTML-CSS"],
    tex2jax: {
    inlineMath: [ ['$','$'], ["\\(","\\)"] ],
    displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
    processEscapes: true,
    skipTags: ['script', 'noscript', 'style', 'textarea', 'code']
    },
    messageStyle: "none",
    "HTML-CSS": { preferredFont: "TeX", availableFonts: ["STIX","TeX"] }
});
</script>

<style type="text/css">
pre{
    word-break: keep-all;
    word-wrap: break-word;
    white-space: pre-wrap;
} 
</style>

<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

<div class="text-center">
    <h1 class="text-success">{{ problem.title }}</h1>
    <ul class="list-inline">
        <li>Time Limit: {{ problem.limit_time }}s</li>
          
        <li>Memory Limit: {{ problem.limit_memory|filesizeformat }}</li>
    </ul>
</div>

<h3 class="text-info" >Description</h3>
{% autoescape off %}
<pre>{{ problem.content }}</pre>

<h3 class="text-info" >Input</h3>
<pre>{{ problem.input }}</pre>

<h3 class="text-info" >Output</h3>
<pre>{{ problem.output }}</pre>

{% endautoescape %}

{% if problem.samples %}
    {% for s in problem.samples %}
        <h3 class="text-info" >Sample Input {{ forloop.counter }}</h3>
        <pre>{{ s.input }}</pre>

        <h3 class="text-info" >Sample Output {{ forloop.counter }}</h3>
        <pre>{{ s.output }}</pre>
    {% endfor %}
{% endif %}

{% autoescape off %}
<h3 class="text-info" >Note</h3>
<pre>{{ problem.note }}</pre>

<h3 class="text-info" >Source</h3>
<pre>{{ problem.source }}</pre>
{% endautoescape %}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,392评论 25 707
  • 注:本文是应可乐兄 @Yi罐可乐 的邀请写下的简短文章,也是对自己学习 Python web 开发的一个总结与交待...
    Tim_Lee阅读 18,862评论 7 406
  • 你是不是有这样的经历?买了很多书确放在书柜不看,买了很多付费课程确也没有认真看过,确还在满世界找着怎么提升自己途径...
    叫我俗人阅读 133评论 0 0
  • 每天的我都跟在朋友身旁,总是不敢一人去面对但是总是有面对的时候。可是那时的自己可能才后悔为什么没有锻炼自己,不是...
    笔记的外壳阅读 259评论 0 1
  • 助数詞(じょすうし) 一回(いっかい)、一個(いっこ)、一枚(いちまい)、一本(いっぽん)、一匹(いっぴき)、一羽...
    一直都是干物女啊WWW阅读 101评论 1 0