山東大學(xué)-VirtualJudge-總結(jié)4

在最近這幾天,由于我下一步主要工作負(fù)責(zé)SDUVJ前端的開發(fā)以及前段和前端與后臺(tái)之間的通信豺型,所以在通讀對(duì)Django框架有了足夠的了解之后,主要集中在進(jìn)一步閱讀SDUOJ的源碼,希望能夠從中借鑒OlineJudge的相關(guān)開發(fā)經(jīng)驗(yàn)蔚约。

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 %}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坑赡,一起剝皮案震驚了整個(gè)濱河市烙如,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毅否,老刑警劉巖亚铁,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異螟加,居然都是意外死亡徘溢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門捆探,熙熙樓的掌柜王于貴愁眉苦臉地迎上來然爆,“玉大人,你說我怎么就攤上這事黍图≡瘢” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵助被,是天一觀的道長剖张。 經(jīng)常有香客問我切诀,道長,這世上最難降的妖魔是什么搔弄? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任幅虑,我火速辦了婚禮,結(jié)果婚禮上顾犹,老公的妹妹穿的比我還像新娘倒庵。我一直安慰自己,他們只是感情好蹦渣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布哄芜。 她就那樣靜靜地躺著,像睡著了一般柬唯。 火紅的嫁衣襯著肌膚如雪认臊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天锄奢,我揣著相機(jī)與錄音失晴,去河邊找鬼。 笑死拘央,一個(gè)胖子當(dāng)著我的面吹牛涂屁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灰伟,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼拆又,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了栏账?” 一聲冷哼從身側(cè)響起帖族,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挡爵,沒想到半個(gè)月后竖般,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茶鹃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年涣雕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闭翩。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挣郭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疗韵,到底是詐尸還是另有隱情兑障,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站旺垒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肤无。R本人自食惡果不足惜先蒋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宛渐。 院中可真熱鬧竞漾,春花似錦、人聲如沸窥翩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寇蚊。三九已至笔时,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仗岸,已是汗流浹背允耿。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扒怖,地道東北人较锡。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像盗痒,于是被迫代替她去往敵國和親蚂蕴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,756評(píng)論 25 707
  • 注:本文是應(yīng)可樂兄 @Yi罐可樂 的邀請(qǐng)寫下的簡短文章俯邓,也是對(duì)自己學(xué)習(xí) Python web 開發(fā)的一個(gè)總結(jié)與交待...
    Tim_Lee閱讀 18,889評(píng)論 7 406
  • 你是不是有這樣的經(jīng)歷骡楼?買了很多書確放在書柜不看,買了很多付費(fèi)課程確也沒有認(rèn)真看過看成,確還在滿世界找著怎么提升自己途徑...
    叫我俗人閱讀 135評(píng)論 0 0
  • 每天的我都跟在朋友身旁君编,總是不敢一人去面對(duì)但是總是有面對(duì)的時(shí)候〈ɑ牛可是那時(shí)的自己可能才后悔為什么沒有鍛煉自己吃嘿,不是...
    筆記的外殼閱讀 261評(píng)論 0 1
  • 助數(shù)詞(じょすうし) 一回(いっかい)、一個(gè)(いっこ)梦重、一枚(いちまい)兑燥、一本(いっぽん)、一匹(いっぴき)琴拧、一羽...
    一直都是干物女啊WWW閱讀 102評(píng)論 1 0