Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
bwinf
medal
Commits
9996a14e
Commit
9996a14e
authored
Jul 14, 2020
by
Robert Czechowski
Browse files
Template jwinf: Make contest.hbs a rebased template
parent
9225e515
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/core.rs
View file @
9996a14e
...
...
@@ -74,6 +74,22 @@ fn fill_user_data(session: &SessionUser, data: &mut json_val::Map<String, serde_
data
.insert
(
"parent"
.to_string
(),
to_json
(
&
"base"
));
}
fn
fill_oauth_data
((
self_url
,
oauth_providers
):
(
Option
<
String
>
,
Option
<
Vec
<
OauthProvider
>>
),
data
:
&
mut
json_val
::
Map
<
String
,
serde_json
::
Value
>
)
{
let
mut
oauth_links
:
Vec
<
(
String
,
String
,
String
)
>
=
Vec
::
new
();
if
let
Some
(
oauth_providers
)
=
oauth_providers
{
for
oauth_provider
in
oauth_providers
{
oauth_links
.push
((
oauth_provider
.provider_id
.to_owned
(),
oauth_provider
.login_link_text
.to_owned
(),
oauth_provider
.url
.to_owned
()));
}
}
data
.insert
(
"self_url"
.to_string
(),
to_json
(
&
self_url
));
data
.insert
(
"oauth_links"
.to_string
(),
to_json
(
&
oauth_links
));
}
fn
grade_to_string
(
grade
:
i32
)
->
String
{
match
grade
{
0
=>
"Noch kein Schüler"
.to_string
(),
...
...
@@ -90,7 +106,7 @@ fn grade_to_string(grade: i32) -> String {
}
pub
fn
index
<
T
:
MedalConnection
>
(
conn
:
&
T
,
session_token
:
Option
<
String
>
,
(
self_url
,
oauth_providers
)
:
(
Option
<
String
>
,
Option
<
Vec
<
OauthProvider
>>
))
oauth_infos
:
(
Option
<
String
>
,
Option
<
Vec
<
OauthProvider
>>
))
->
(
String
,
json_val
::
Map
<
String
,
json_val
::
Value
>
)
{
let
mut
data
=
json_val
::
Map
::
new
();
...
...
@@ -103,17 +119,7 @@ pub fn index<T: MedalConnection>(conn: &T, session_token: Option<String>,
}
}
let
mut
oauth_links
:
Vec
<
(
String
,
String
,
String
)
>
=
Vec
::
new
();
if
let
Some
(
oauth_providers
)
=
oauth_providers
{
for
oauth_provider
in
oauth_providers
{
oauth_links
.push
((
oauth_provider
.provider_id
.to_owned
(),
oauth_provider
.login_link_text
.to_owned
(),
oauth_provider
.url
.to_owned
()));
}
}
data
.insert
(
"self_url"
.to_string
(),
to_json
(
&
self_url
));
data
.insert
(
"oauth_links"
.to_string
(),
to_json
(
&
oauth_links
));
fill_oauth_data
(
oauth_infos
,
&
mut
data
);
data
.insert
(
"parent"
.to_string
(),
to_json
(
&
"base"
));
(
"index"
.to_owned
(),
data
)
...
...
@@ -172,7 +178,7 @@ pub enum ContestVisibility {
}
pub
fn
show_contests
<
T
:
MedalConnection
>
(
conn
:
&
T
,
session_token
:
&
str
,
(
self_url
,
oauth_providers
)
:
(
Option
<
String
>
,
Option
<
Vec
<
OauthProvider
>>
),
oauth_infos
:
(
Option
<
String
>
,
Option
<
Vec
<
OauthProvider
>>
),
visibility
:
ContestVisibility
)
->
MedalValue
{
...
...
@@ -185,17 +191,7 @@ pub fn show_contests<T: MedalConnection>(conn: &T, session_token: &str,
data
.insert
(
"can_start"
.to_string
(),
to_json
(
&
true
));
}
let
mut
oauth_links
:
Vec
<
(
String
,
String
,
String
)
>
=
Vec
::
new
();
if
let
Some
(
oauth_providers
)
=
oauth_providers
{
for
oauth_provider
in
oauth_providers
{
oauth_links
.push
((
oauth_provider
.provider_id
.to_owned
(),
oauth_provider
.login_link_text
.to_owned
(),
oauth_provider
.url
.to_owned
()));
}
}
data
.insert
(
"self_url"
.to_string
(),
to_json
(
&
self_url
));
data
.insert
(
"oauth_links"
.to_string
(),
to_json
(
&
oauth_links
));
fill_oauth_data
(
oauth_infos
,
&
mut
data
);
let
now
=
time
::
get_time
();
let
v
:
Vec
<
ContestInfo
>
=
...
...
@@ -280,8 +276,11 @@ fn check_contest_constraints(session: &SessionUser, contest: &Contest) -> Contes
grade_matching
}
}
pub
fn
show_contest
<
T
:
MedalConnection
>
(
conn
:
&
T
,
contest_id
:
i32
,
session_token
:
&
str
,
query_string
:
Option
<
String
>
)
->
MedalValueResult
{
pub
fn
show_contest
<
T
:
MedalConnection
>
(
conn
:
&
T
,
contest_id
:
i32
,
session_token
:
&
str
,
query_string
:
Option
<
String
>
,
oauth_infos
:
(
Option
<
String
>
,
Option
<
Vec
<
OauthProvider
>>
))
->
MedalValueResult
{
let
session
=
conn
.get_session_or_new
(
&
session_token
);
let
contest
=
conn
.get_contest_by_id_complete
(
contest_id
);
...
...
@@ -295,7 +294,10 @@ pub fn show_contest<T: MedalConnection>(conn: &T, contest_id: i32, session_token
public
:
contest
.public
};
let
mut
data
=
json_val
::
Map
::
new
();
data
.insert
(
"parent"
.to_string
(),
to_json
(
&
"base"
));
data
.insert
(
"empty"
.to_string
(),
to_json
(
&
"empty"
));
data
.insert
(
"contest"
.to_string
(),
to_json
(
&
ci
));
fill_oauth_data
(
oauth_infos
,
&
mut
data
);
let
constraints
=
check_contest_constraints
(
&
session
,
&
contest
);
...
...
@@ -484,7 +486,7 @@ pub fn start_contest<T: MedalConnection>(conn: &T, contest_id: i32, session_toke
}
pub
fn
login
<
T
:
MedalConnection
>
(
conn
:
&
T
,
login_data
:
(
String
,
String
),
(
self_url
,
oauth_providers
)
:
(
Option
<
String
>
,
Option
<
Vec
<
OauthProvider
>>
))
oauth_infos
:
(
Option
<
String
>
,
Option
<
Vec
<
OauthProvider
>>
))
->
Result
<
String
,
MedalValue
>
{
let
(
username
,
password
)
=
login_data
;
...
...
@@ -497,17 +499,7 @@ pub fn login<T: MedalConnection>(conn: &T, login_data: (String, String),
data
.insert
(
"username"
.to_string
(),
to_json
(
&
username
));
data
.insert
(
"parent"
.to_string
(),
to_json
(
&
"base"
));
let
mut
oauth_links
:
Vec
<
(
String
,
String
,
String
)
>
=
Vec
::
new
();
if
let
Some
(
oauth_providers
)
=
oauth_providers
{
for
oauth_provider
in
oauth_providers
{
oauth_links
.push
((
oauth_provider
.provider_id
.to_owned
(),
oauth_provider
.login_link_text
.to_owned
(),
oauth_provider
.url
.to_owned
()));
}
}
data
.insert
(
"self_url"
.to_string
(),
to_json
(
&
self_url
));
data
.insert
(
"oauth_links"
.to_string
(),
to_json
(
&
oauth_links
));
fill_oauth_data
(
oauth_infos
,
&
mut
data
);
Err
((
"login"
.to_owned
(),
data
))
}
...
...
@@ -515,7 +507,7 @@ pub fn login<T: MedalConnection>(conn: &T, login_data: (String, String),
}
pub
fn
login_with_code
<
T
:
MedalConnection
>
(
conn
:
&
T
,
code
:
&
str
,
(
self_url
,
oauth_providers
)
:
(
Option
<
String
>
,
Option
<
Vec
<
OauthProvider
>>
))
conn
:
&
T
,
code
:
&
str
,
oauth_infos
:
(
Option
<
String
>
,
Option
<
Vec
<
OauthProvider
>>
))
->
Result
<
Result
<
String
,
String
>
,
(
String
,
json_val
::
Map
<
String
,
json_val
::
Value
>
)
>
{
match
conn
.login_with_code
(
None
,
&
code
)
{
Ok
(
session_token
)
=>
Ok
(
Ok
(
session_token
)),
...
...
@@ -527,17 +519,7 @@ pub fn login_with_code<T: MedalConnection>(
data
.insert
(
"code"
.to_string
(),
to_json
(
&
code
));
data
.insert
(
"parent"
.to_string
(),
to_json
(
&
"base"
));
let
mut
oauth_links
:
Vec
<
(
String
,
String
,
String
)
>
=
Vec
::
new
();
if
let
Some
(
oauth_providers
)
=
oauth_providers
{
for
oauth_provider
in
oauth_providers
{
oauth_links
.push
((
oauth_provider
.provider_id
.to_owned
(),
oauth_provider
.login_link_text
.to_owned
(),
oauth_provider
.url
.to_owned
()));
}
}
data
.insert
(
"self_url"
.to_string
(),
to_json
(
&
self_url
));
data
.insert
(
"oauth_links"
.to_string
(),
to_json
(
&
oauth_links
));
fill_oauth_data
(
oauth_infos
,
&
mut
data
);
Err
((
"login"
.to_owned
(),
data
))
}
...
...
src/webfw_iron.rs
View file @
9996a14e
...
...
@@ -297,7 +297,7 @@ fn greet_personal<C>(req: &mut Request) -> IronResult<Response>
// hier ggf. Daten aus dem Request holen
let
config
=
req
.get
::
<
Read
<
SharedConfiguration
>>
()
.unwrap
();
let
(
self_url
,
oauth_providers
)
=
(
config
.self_url
.clone
(),
config
.oauth_providers
.clone
());
let
oauth_infos
=
(
config
.self_url
.clone
(),
config
.oauth_providers
.clone
());
let
(
template
,
mut
data
)
=
{
// hier ggf. Daten aus dem Request holen
...
...
@@ -305,7 +305,7 @@ fn greet_personal<C>(req: &mut Request) -> IronResult<Response>
let
conn
=
mutex
.lock
()
.unwrap_or_else
(|
e
|
e
.into_inner
());
// Antwort erstellen und zurücksenden
core
::
index
(
&*
conn
,
session_token
,
(
self_url
,
oauth_provider
s
)
)
core
::
index
(
&*
conn
,
session_token
,
oauth_info
s
)
};
/*if let Some(server_message) = &config.server_message {
...
...
@@ -463,7 +463,11 @@ fn contest<C>(req: &mut Request) -> IronResult<Response>
let
session_token
=
req
.require_session_token
()
?
;
let
query_string
=
req
.url
.query
()
.map
(|
s
|
s
.to_string
());
let
(
template
,
data
)
=
with_conn!
[
core
::
show_contest
,
C
,
req
,
contest_id
,
&
session_token
,
query_string
]
.aug
(
req
)
?
;
let
config
=
req
.get
::
<
Read
<
SharedConfiguration
>>
()
.unwrap
();
let
oauth_infos
=
(
config
.self_url
.clone
(),
config
.oauth_providers
.clone
());
let
(
template
,
data
)
=
with_conn!
[
core
::
show_contest
,
C
,
req
,
contest_id
,
&
session_token
,
query_string
,
oauth_infos
]
.aug
(
req
)
?
;
let
mut
resp
=
Response
::
new
();
resp
.set_mut
(
Template
::
new
(
&
template
,
data
))
.set_mut
(
status
::
Ok
);
...
...
templates/jwinf/contest.hbs
View file @
9996a14e
{{#if
not_bare
}}
<!DOCTYPE html>
<html
lang=
"en"
style=
"background-color: #fafafa;"
>
<head>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=450"
>
<title>
Jugendwettbewerb Informatik: Programmieren – leichter, als du denkst!
</title>
<link
rel=
"stylesheet"
href=
"/static/lib/bulma/medal-bulma-0.7.5.css"
>
<link
rel=
"icon"
href=
"/static/images/favicon.png"
type=
"image/png"
>
<style>
ul
{
list-style-type
:
none
;
font-size
:
x-large
;
margin-left
:
20px
;
}
</style>
</head>
<body
style=
"background-color: white;"
>
<div
class=
"container"
style=
"padding: 1.5rem;"
>
<div
class=
"columns"
>
<div
class=
"column is-7"
>
<a
href=
"/"
>
<img
style=
"float:left; margin-right: 10px;"
src=
"/static/images/klein.png"
>
</a>
<h1
class=
"title"
>
Jugendwettbewerb Informatik
</h1>
<h2
class=
"subtitle"
>
Programmieren – leichter, als du denkst!
</h2>
</div>
<div
class=
"column is-one-third"
>
{{#if
logged_in
}}
<div
class=
"columns"
>
<div
class=
"column is-8"
>
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"
>
👤
Profil
</a>
{{#if
teacher
}}
<a
href=
"/group/"
class=
"button is-warning is-small"
>
⚙
Gruppenverwaltung
</a>
{{/if}}
</div>
<div
class=
"column"
><a
href=
"/logout"
class=
"button is-small is-danger"
type=
"submit"
>
⨯
Logout
</a></div>
</div>
<div
class=
"columns"
>
<div
class=
"column"
></div>
</div>
{{/if}}
</div>
</div>
{{#
*
inline
"page"
}}
{{#if
teacher
}}
<!-- <div class="columns alogin">
<div class="column is-8 is-offset-2">
<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>
</div>
</div> -->
<!-- <div class="columns alogin">
<div class="column is-8 is-offset-2">
<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>
{{#if
not_bare
}}
<div
class=
"columns"
>
<div
class=
"column is-8 is-offset-2"
>
<h3
class=
"title is-4"
>
{{#if
has_duration
}}
Wettbewerb:
{{else}}
Trainingsaufgaben:
{{/if}}
{{
contest
.
name
}}
</h3>
{{#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>
</div> -->
{{/if}}
<div
class=
"columns"
>
<div
class=
"column is-8 is-offset-2"
>
<h3
class=
"title is-4"
>
{{#if
has_duration
}}
Wettbewerb:
{{else}}
Trainingsaufgaben:
{{/if}}
{{
contest
.
name
}}
</h3>
{{#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>
</a>
</div>
</a>
</div>
</div>
</div>
{{/if}}
<div
class=
"columns"
id=
"bare_content"
>
{{/if}}
<div
class=
"columns"
id=
"bare_content"
>
{{/if}}
<div
class=
"column is-6 is-offset-3"
>
<div
style=
"min-height: 400px; margin-bottom:100px;"
class=
"content"
>
<!-- <h3 class="title is-4">
{{#if
has_duration
}}
Wettbewerb:
{{else}}
Trainingsaufgaben:
{{/if}}
{{
contest
.
name
}}
</h3>
{{#if
contest
.
duration
}}
<h4 class="subtitle is-5">Dauer:
{{
contest
.
duration
}}
Minuten</h4>
{{/if}}
-->
{{#if
is_started
}}
<p>
{{#if
has_duration
}}
{{#if
is_time_left
}}
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>
{{else}}
Die Zeit ist abgelaufen. Du kannst nun die Aufgaben nicht mehr öffnen.
{{/if}}
{{/if}}
</p>
{{#
each
tasks
}}
<div>
{{
name
}}
<ul
style=
"list-style-type: none;margin: 5px 30px 15px;padding: 0;"
>
{{#
each
subtasks
}}
<li>
{{#if
..
/
..
/
is_time_up
}}
<button
class=
"button is-link is-outlined"
disabled
>
{{
linktext
}}
</button>
{{else}}
<a
href=
"/task/
{{
id
}}
"
class=
"button is-link is-outlined"
>
{{
linktext
}}
</a>
{{/if}}
</li>
{{/
each
}}
</ul>
</div>
{{/
each
}}
<hr>
<div
class=
"column is-6 is-offset-3"
>
<div
style=
"min-height: 400px; margin-bottom:100px;"
class=
"content"
>
{{#if
is_started
}}
<p>
{{#if
has_duration
}}
{{#if
is_time_left
}}
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>
{{else}}
Die Zeit ist abgelaufen. Du kannst nun die Aufgaben nicht mehr öffnen.
{{/if}}
{{/if}}
</p>
{{#
each
tasks
}}
<div>
{{
name
}}
<ul
style=
"list-style-type: none;margin: 5px 30px 15px;padding: 0;"
>
{{#
each
subtasks
}}
<li>
{{#if
..
/
..
/
is_time_up
}}
<button
class=
"button is-link is-outlined"
disabled
>
{{
linktext
}}
</button>
{{else}}
<a
href=
"/task/
{{
id
}}
"
class=
"button is-link is-outlined"
>
{{
linktext
}}
</a>
{{/if}}
</li>
{{/
each
}}
</ul>
</div>
{{/
each
}}
<hr>
<p>
Punktestand:
{{
total_points
}}
★ /
{{
max_total_points
}}
☆
(
{{
relative_points
}}
%)
</p>
{{else}}
{{#if
can_start
}}
<p>
<form
action=
""
method=
"post"
>
<input
type=
"hidden"
name=
"csrf_token"
value=
"
{{
csrf_token
}}
"
>
<input
class=
"button is-warning is-medium"
type=
"submit"
value=
"
{{#if
contest
.
duration
}}
⏱
{{/if}}
Jetzt starten!
{{#if
contest
.
duration
}}
(
{{
contest
.
duration
}}
min)
{{/if}}
"
style=
"font-weight:bold;"
>
</form>
</p>
{{#if
contest
.
duration
}}
<p>
Punktestand:
{{
total_points
}}
★ /
{{
max_total_points
}}
☆
(
{{
relative_points
}}
%)
Der Wettbewerb läuft nach dem Starten für
{{
contest
.
duration
}}
Minuten.
Der Wettbewerb kann nach dem Starten nicht mehr pausiert werden!
</p>
{{/if}}
{{#if
time_until_end
}}
<p>
Der Wettbewerb kann noch gestartet werden:
{{
time_until_end
.
0
}}
Tage,
{{
time_until_end
.
1
}}
Stunden,
{{
time_until_end
.
2
}}
Minuten.
</p>
{{/if}}
{{else}}
<p>
Du kannst diesen Wettbewerb nicht starten.
</p>
{{#if
constraints
.
contest_over
}}
<p>
Der Wettbewerb ist bereits beendet.
</p>
{{else}}
{{#if
can_start
}}
<p>
<form
action=
""
method=
"post"
>
<input
type=
"hidden"
name=
"csrf_token"
value=
"
{{
csrf_token
}}
"
>
<input
class=
"button is-warning is-medium"
type=
"submit"
value=
"
{{#if
contest
.
duration
}}
⏱
{{/if}}
Jetzt starten!
{{#if
contest
.
duration
}}
(
{{
contest
.
duration
}}
min)
{{/if}}
"
style=
"font-weight:bold;"
>
</form>
</p>
{{#if
contest
.
duration
}}
<p>
Der Wettbewerb läuft nach dem Starten für
{{
contest
.
duration
}}
Minuten.
Der Wettbewerb kann nach dem Starten nicht mehr pausiert werden!
</p>
{{/if}}
{{#if
time_until_end
}}
<p>
Der Wettbewerb kann noch gestartet werden:
{{
time_until_end
.
0
}}
Tage,
{{
time_until_end
.
1
}}
Stunden,
{{
time_until_end
.
2
}}
Minuten.
</p>
{{#if
constraints
.
contest_not_begun
}}
<p>
Der Wettbewerb hat noch nicht begonnen.
</p>
{{#if
time_until_start
}}
<p>
Der Wettbewerb wird geöffnet in:
{{
time_until_start
.
0
}}
Tagen,
{{
time_until_start
.
1
}}
Stunden,
{{
time_until_start
.
2
}}
Minuten.
</p>
{{/if}}
{{else}}
<p>
Du kannst diesen Wettbewerb nicht starten.
</p>
{{#if
constraints
.
contest_over
}}
<p>
Der Wettbewerb ist bereits beendet.
</p>
{{#if
logged_in
}}
{{#if
constraints
.
grade_too_low
}}
<p>
Deine angegebene Jahrgangsstufe entspricht nicht den für diesen Wettbewerb vorgesehenen Altersgruppen.
</p>
{{/if}}
{{#if
constraints
.
grade_too_high
}}
<p>
Deine angegebene Jahrgangsstufe entspricht nicht den für diesen Wettbewerb vorgesehenen Altersgruppen.
</p>
{{/if}}
{{else}}
{{#if
constraints
.
contest_not_begun
}}
<p>
Der Wettbewerb hat noch nicht begonnen.
</p>
{{#if
time_until_start
}}
<p>
Der Wettbewerb wird geöffnet in:
{{
time_until_start
.
0
}}
Tagen,
{{
time_until_start
.
1
}}
Stunden,
{{
time_until_start
.
2
}}
Minuten.
</p>
{{/if}}
{{else}}
{{#if
logged_in
}}
{{#if
constraints
.
grade_too_low
}}
<p>
Deine angegebene Jahrgangsstufe entspricht nicht den für diesen Wettbewerb vorgesehenen Altersgruppen.
</p>
{{/if}}
{{#if
constraints
.
grade_too_high
}}
<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}}
<p>
Möglicherweise musst du dich zunächst
<a
href=
"/login"
>
einloggen
</a>
.
</p>
{{/if}}
{{/if}}
{{/if}}
</div>
</div>
{{#if
not_bare
}}
{{/if}}
{{/if}}
</div>
</div>
<footer
class=
"footer"
>
<div
class=
"content has-text-centered"
>
<p>
</p>
</div>
</footer>
<script>
// Reload page content as soon as you come back from another task via the back button in order to show the newly achieved stars
function
reload_content
(
event
)
{
var
request
=
new
XMLHttpRequest
();
request
.
open
(
"
GET
"
,
"
?bare&r=
"
+
Math
.
random
().
toString
(
36
).
substr
(
2
));
request
.
setRequestHeader
(
"
X-Requested-With
"
,
"
XMLHttpRequest
"
);
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
();
}
window
.
onpageshow
=
reload_content
;
</script>
</body>
</html>
{{#if
not_bare
}}
</div>
<script>
// Reload page content as soon as you come back from another task via the back button in order to show the newly achieved stars
function
reload_content
(
event
)
{
var
request
=
new
XMLHttpRequest
();
request
.
open
(
"
GET
"
,
"
?bare&r=
"
+
Math
.
random
().
toString
(
36
).
substr
(
2
));
request
.
setRequestHeader
(
"
X-Requested-With
"
,
"
XMLHttpRequest
"
);
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
();
}
window
.
onpageshow
=
reload_content
;
</script>
{{/if}}
{{/
inline
}}
{{#if
not_bare
}}
{{~>
(
parent
)
~}}
{{else}}
{{~>
(
empty
)
~}}
{{/if}}
Robert Czechowski
@zgtm
mentioned in commit
96c9c52a
·
Jul 21, 2020
mentioned in commit
96c9c52a
mentioned in commit 96c9c52a87b3682827fa970770ada4a4eb8d8cff
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment