contest.hbs 9.59 KB
Newer Older
1
{{#if not_bare}}
2
3
4
5
<!DOCTYPE html>
<html lang="en" style="background-color: #fafafa;">
  <head>
    <meta charset="utf-8">
6
    <meta name="viewport" content="width=450">
7
    <title>Jugendwettbewerb Informatik: Programmieren – leichter, als du denkst!</title>
8
    <link rel="stylesheet" href="/static/lib/bulma/medal-bulma-0.7.5.css">
9
    <link rel="icon" href="/static/images/favicon.png" type="image/png">
10
11
12
13
14
15
16
    <style>
      ul {
      list-style-type: none;
      font-size:x-large;
      margin-left:20px;
      }
    </style>
17
18
  </head>
  <body style="background-color: white;">
19
    <div class="container" style="padding: 1.5rem;">
20
      <div class="columns">
21
        <div class="column is-7">
22
          <a href="/">
23
            <img style="float:left; margin-right: 10px;" src="/static/images/klein.png">
24
25
          </a>
          <h1 class="title">Jugendwettbewerb Informatik</h1>
26
          <h2 class="subtitle">Programmieren – leichter, als du denkst!</h2>
27
28
29
30
        </div>
        <div class="column is-one-third">
          &nbsp;
          {{#if logged_in}}
31
32
            <div class="columns">
              <div class="column is-8">
33
34
35
36
37
38
39
40
41
42
                Eingeloggt als <em>{{ username }}</em>
                {{#if firstname}}{{#if lastname}}
                  ({{firstname}} {{lastname}})
                {{/if}}{{/if}}
                {{#if teacher}}
                  [Lehrer]
                {{/if}}
                <br>
                <a href="/profile" class="button is-info is-small">👤 &nbsp; Profil</a>
                {{#if teacher}}
43
                  <a href="/group/" class="button is-warning is-small">&nbsp; Gruppenverwaltung</a>
44
45
46
47
                {{/if}}
              </div>
              <div class="column"><a href="/logout" class="button is-small is-danger" type="submit">&nbsp; Logout</a></div>
            </div>
48
            <div class="columns">
49
              <div class="column"></div>
50
            </div>
51
52
53
          {{/if}}
        </div>
      </div>
54

55
      {{#if teacher}}
56
        <!-- <div class="columns alogin">
57
          <div class="column is-8 is-offset-2">
58
59
60
61
62
63
            <a href="/group/">
              <div class="notification is-warning">
                <h3 class="title is-5">Gruppenverwaltung</h3>
                <p>Gruppen für die Wettbewerbsteilnahme anlegen und verwalten</p>
              </div>
            </a>
64
          </div>
65
        </div> -->
66

67
        <!-- <div class="columns alogin">
68
69
          <div class="column is-8 is-offset-2">
            <a href="/contest/{{ contest.id }}/result/">
70
              <div class="notification is-info">
71
72
                <h3 class="title is-5">Gruppenergebnisse</h3>
                <p>Ergebnisse meiner Gruppen für diesen Wettbewerb einsehen</p>
73
              </div>
74
75
            </a>
          </div>
76
        </div> -->
77
      {{/if}}
78

79
80
81
82
83
      


<div class="columns">
<div class="column is-8 is-offset-2">
84
   <h3 class="title is-4">{{#if has_duration}}Wettbewerb:{{else}}Trainingsaufgaben:{{/if}} {{ contest.name }}</h3>
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
   {{#if contest.duration}}<h4 class="subtitle is-5">Dauer: {{contest.duration}} Minuten</h4>{{/if}}
</div>
</div>

{{#if teacher}}
<div class="columns">
<div class="column is-6 is-offset-3">
   <a href="/contest/{{ contest.id }}/result/">
      <div class="notification is-info">
         <h3 class="title is-5">Gruppenergebnisse</h3>
         <p>Ergebnisse meiner Gruppen für diesen Wettbewerb einsehen</p>
      </div>
   </a>
</div>
</div>
100
{{/if}}
101

102
103
104
<div class="columns" id="bare_content">
{{/if}}
         <div class="column is-6 is-offset-3">
105
           <div style="min-height: 400px; margin-bottom:100px;" class="content">
106
              
107
            <!--  <h3 class="title is-4">{{#if has_duration}}Wettbewerb:{{else}}Trainingsaufgaben:{{/if}} {{ contest.name }}</h3>
108
            {{#if contest.duration}}<h4 class="subtitle is-5">Dauer: {{contest.duration}} Minuten</h4>{{/if}} -->
109

110
            {{#if is_started}}
111
              <p>
112
                 {{#if has_duration}}
113
                    {{#if is_time_left}}
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
                       Verbleibenden Zeit: <span id="timetime">{{time_left}}</span>

                       <script>
                          var seconds_left_at_start = {{seconds_left}};
                          var timerStart = Date.now();

                          function lz(a) {
                             var b = a.toString();
                             if (b.length < 2) {
                                return "0" + b;
                             }
                             return b;
                          }

                          function updateTimer() {
                             var seconds_passed = (Date.now() - timerStart) / 1000;
                             var seconds_left = seconds_left_at_start - seconds_passed;

                             var hour = seconds_left / 3600 | 0;
                             var min = (seconds_left / 60 | 0) % 60 | 0;
                             var sec = seconds_left % 60 | 0;

                             text = hour.toString() + ":" + lz(min) + "<span id=\"ttsec\">:" + lz(sec) + "</span>";
                             document.getElementById("timetime").innerHTML = text;
                          }

                          setInterval(updateTimer, 300);
                       </script>
142
143
144
                  {{else}}
                    Die Zeit ist abgelaufen. Du kannst nun die Aufgaben nicht mehr öffnen.
                  {{/if}}
145
146
                {{/if}}
              </p>
147

148
              {{#each tasks}}
149
                <div>
150
                  {{name}}
151
   
152
                   <ul style="list-style-type: none;margin: 5px 30px 15px;padding: 0;">
153
                    {{#each subtasks}}
154
                       <li>
155
156
                          {{#if ../../is_time_up}}
                             <button class="button is-link is-outlined" disabled>{{linktext}}</button>
157
158
159
160
                          {{else}}
                             <a href="/task/{{id}}" class="button is-link is-outlined">{{linktext}}</a>
                          {{/if}}
                       </li>
161
162
163
164
                    {{/each}}
                  </ul>
                </div>
              {{/each}}
165

166
167
168
169
              <hr>
              <p>
                Punktestand: {{ total_points }} ★ / {{ max_total_points }}&nbsp; ({{ relative_points }} %)
              </p>
170
171
                
            {{else}}
172

173
174
175
              {{#if can_start}}
                <p>
                  <form action="" method="post">
176
                    <input type="hidden" name="csrf_token" value="{{csrf_token}}">
177
                    <input class="button is-warning is-medium" type="submit" value="{{#if contest.duration}}⏱ &nbsp; {{/if}}Jetzt starten! {{#if contest.duration}}({{contest.duration}} min){{/if}}" style="font-weight:bold;">
178
179
                  </form>
                </p>
180
181
                
                {{#if contest.duration}}
182
183
184
185
                   <p>
                      Der Wettbewerb läuft nach dem Starten für {{contest.duration}} Minuten.
                      Der Wettbewerb kann nach dem Starten nicht mehr pausiert werden!
                   </p>
186
                {{/if}}
187
                
188
                {{#if time_until_end}}
189
                   <p>Der Wettbewerb kann noch gestartet werden: {{ time_until_end.0 }} Tage, {{ time_until_end.1 }} Stunden, {{ time_until_end.2 }} Minuten.</p>
190
                {{/if}}
191
              {{else}}
192
                <p>Du kannst diesen Wettbewerb nicht starten.</p>
193
194
                {{#if constraints.contest_over}}
                   <p>Der Wettbewerb ist bereits beendet.</p>
195
                {{else}}
196
                   {{#if constraints.contest_not_begun}}
197
                      <p>Der Wettbewerb hat noch nicht begonnen.</p>
198
                      {{#if time_until_start}}
199
                         <p>Der Wettbewerb wird geöffnet in: {{ time_until_start.0 }} Tagen, {{ time_until_start.1 }} Stunden, {{ time_until_start.2 }} Minuten.</p>
200
201
202
                      {{/if}}
                   {{else}}
                      {{#if logged_in}}
203
                         {{#if constraints.grade_too_low}}
204
205
                            <p>Deine angegebene Jahrgangsstufe entspricht nicht den für diesen Wettbewerb vorgesehenen Altersgruppen.</p>
                         {{/if}}
206
                         {{#if constraints.grade_too_high}}
207
208
209
210
211
212
                            <p>Deine angegebene Jahrgangsstufe entspricht nicht den für diesen Wettbewerb vorgesehenen Altersgruppen.</p>
                         {{/if}}
                      {{else}}
                         <p>Möglicherweise musst du dich zunächst <a href="/login">einloggen</a>.</p>
                      {{/if}}
                   {{/if}}
213
                {{/if}}
214
              {{/if}}
215
            {{/if}}
216
217
          </div>
        </div>
218
        
219
{{#if not_bare}}
220
221
222
223
224
      </div>
    </div>
    <footer class="footer">
      <div class="content has-text-centered">
        <p>
225
        </p>
226
227
      </div>
    </footer>
228
229

    <script>
230
      // Reload page content as soon as you come back from another task via the back button in order to show the newly achieved stars
231
      function reload_content(event) {
232
        var request = new XMLHttpRequest();
233
234
        request.open("GET","?bare&r=" + Math.random().toString(36).substr(2));
        request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
235
236
237
238
239
240
241
242
        request.addEventListener('load', function(event) {
          if (request.status >= 200 && request.status < 300) {
            document.getElementById("bare_content").innerHTML = request.responseText;
          } else {
            console.warn(request.statusText, request.responseText);
          }
        });
        request.send();
243
      }
244
245

      window.onpageshow = reload_content;
246
    </script>
247
248
  </body>
</html>
249
{{/if}}