Skip to content
Snippets Groups Projects
Commit e5be32b7 authored by Fernando K's avatar Fernando K
Browse files

Refactor into BaseContext

parent e932b37b
No related branches found
No related tags found
No related merge requests found
......@@ -370,26 +370,39 @@ use actix_web_flash_messages::IncomingFlashMessages;
type GetResult = Result<HttpResponse, GetError>;
#[derive(Serialize)]
struct BaseContext {
logged_user: Option<LoggedUser>,
flash_messages: IncomingFlashMessages,
base_url: String,
}
fn get_base_context(
logged_user: Option<LoggedUser>,
flash_messages: IncomingFlashMessages,
) -> BaseContext {
BaseContext {
logged_user,
flash_messages,
base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
}
}
#[get("/login")]
async fn get_login(
flash_messages: IncomingFlashMessages,
identity: Option<Identity>,
hb: web::Data<Handlebars<'_>>,
) -> GetResult {
let logged_user = identity.and_then(|identity| get_identity(&identity));
let base = get_base_context(
identity.and_then(|identity| get_identity(&identity)),
flash_messages
);
#[derive(Serialize)]
struct LoginContext {
logged_user: Option<LoggedUser>,
flash_messages: IncomingFlashMessages,
base_url: String,
}
struct Context { base: BaseContext }
Ok(HttpResponse::Ok().body(hb.render(
"login",
&LoginContext {
logged_user,
flash_messages,
base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
},
&Context { base },
)?))
}
......@@ -399,20 +412,15 @@ async fn get_me(
identity: Identity,
hb: web::Data<Handlebars<'_>>,
) -> GetResult {
let logged_user = require_identity(&identity)?;
let base = get_base_context(
Some(require_identity(&identity)?),
flash_messages
);
#[derive(Serialize)]
struct MeContext {
logged_user: LoggedUser,
flash_messages: IncomingFlashMessages,
base_url: String,
}
struct Context { base: BaseContext }
Ok(HttpResponse::Ok().body(hb.render(
"me",
&MeContext {
logged_user,
flash_messages,
base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
},
&Context { base },
)?))
}
......@@ -519,6 +527,7 @@ async fn get_contest_by_id(
request: HttpRequest,
) -> GetResult {
let logged_user = require_identity(&identity)?;
let base = get_base_context(Some(require_identity(&identity)?), flash_messages);
#[derive(Serialize)]
struct FormattedProblemByContestWithScore {
......@@ -533,13 +542,11 @@ async fn get_contest_by_id(
}
#[derive(Serialize)]
struct ContestContext {
struct Context {
base: BaseContext,
contest: FormattedContest,
problems: Vec<FormattedProblemByContestWithScore>,
submissions: Vec<FormattedSubmission>,
logged_user: LoggedUser,
flash_messages: IncomingFlashMessages,
base_url: String,
}
let path = path.into_inner();
......@@ -570,7 +577,8 @@ async fn get_contest_by_id(
Ok(HttpResponse::Ok().body(
hb.render(
"contest",
&ContestContext {
&Context {
base,
contest: get_formatted_contest(&tz, &contest),
problems: problems
.iter()
......@@ -592,9 +600,6 @@ async fn get_contest_by_id(
user_accepted_count: p.user_accepted_count,
})
.collect(),
logged_user,
flash_messages,
base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
submissions: submissions
.iter()
.map(|(s, c, u)| format_submission(&tz, s, c, u))
......@@ -618,6 +623,7 @@ async fn get_contest_scoreboard_by_id(
request: HttpRequest,
) -> GetResult {
let logged_user = require_identity(&identity)?;
let base = get_base_context(Some(require_identity(&identity)?), flash_messages);
#[derive(Serialize)]
struct FormattedProblemByContestWithScore {
......@@ -640,13 +646,11 @@ async fn get_contest_scoreboard_by_id(
}
#[derive(Serialize)]
struct ScoreboardContext {
struct Context {
base: BaseContext,
contest: FormattedContest,
scores: Vec<Score>,
submissions: Vec<FormattedSubmission>,
logged_user: LoggedUser,
flash_messages: IncomingFlashMessages,
base_url: String,
}
let path = path.into_inner();
......@@ -719,12 +723,10 @@ async fn get_contest_scoreboard_by_id(
Ok(HttpResponse::Ok().body(
hb.render(
"scoreboard",
&ScoreboardContext {
&Context {
base,
contest: get_formatted_contest(&tz, &contest),
scores,
logged_user,
flash_messages,
base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
submissions: submissions
.iter()
.map(|(s, c, u)| format_submission(&tz, s, c, u))
......@@ -747,6 +749,7 @@ async fn get_contest_problem_by_id_label(
request: HttpRequest,
) -> GetResult {
let logged_user = require_identity(&identity)?;
let base = get_base_context(Some(require_identity(&identity)?), flash_messages);
#[derive(Serialize, Debug)]
struct LanguageContext {
......@@ -756,16 +759,14 @@ async fn get_contest_problem_by_id_label(
}
#[derive(Serialize)]
struct ContestProblemContext {
struct Context {
base: BaseContext,
languages: Vec<LanguageContext>,
language: Option<String>,
contest: FormattedContest,
problems: Vec<ProblemByContest>,
problem: ProblemByContest,
submissions: Vec<FormattedSubmission>,
flash_messages: IncomingFlashMessages,
base_url: String,
logged_user: LoggedUser,
}
let mut languages = languages
......@@ -811,15 +812,13 @@ async fn get_contest_problem_by_id_label(
Ok(HttpResponse::Ok().body(
hb.render(
"contest_problem",
&ContestProblemContext {
&Context {
base,
contest: get_formatted_contest(&tz, &contest),
languages,
problems,
problem,
flash_messages,
base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
language: session.get("language")?,
logged_user,
submissions: submissions
.iter()
.map(|(s, c, u)| format_submission(&tz, s, c, u))
......@@ -1028,6 +1027,7 @@ async fn get_submissions_me(
#[get("/submissions/{uuid}")]
async fn get_submission(
flash_messages: IncomingFlashMessages,
identity: Identity,
pool: web::Data<DbPool>,
hb: web::Data<Handlebars<'_>>,
......@@ -1035,6 +1035,7 @@ async fn get_submission(
tz: web::Data<Tz>,
) -> GetResult {
let logged_user = require_identity(&identity)?;
let base = get_base_context(Some(require_identity(&identity)?), flash_messages);
let mut connection = pool.get()?;
#[derive(Serialize)]
......@@ -1054,10 +1055,9 @@ async fn get_submission(
}
#[derive(Serialize)]
struct SubmissionContext {
struct Context {
base: BaseContext,
submission: Submission,
base_url: String,
logged_user: LoggedUser,
}
let path = path.into_inner();
......@@ -1070,9 +1070,8 @@ async fn get_submission(
Ok(HttpResponse::Ok().body(hb.render(
"submission",
&SubmissionContext {
logged_user,
base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
&Context {
base,
submission: Submission {
uuid: submission.uuid,
verdict: submission.verdict,
......@@ -1517,12 +1516,11 @@ async fn get_main(
tz: web::Data<Tz>,
) -> GetResult {
let logged_user = get_identity(&identity);
let base = get_base_context(get_identity(&identity), flash_messages);
#[derive(Serialize)]
struct MainContext {
logged_user: Option<LoggedUser>,
flash_messages: IncomingFlashMessages,
base_url: String,
struct Context {
base: BaseContext,
contests: Vec<FormattedContest>,
submissions: Vec<FormattedSubmission>,
}
......@@ -1533,10 +1531,8 @@ async fn get_main(
Ok(HttpResponse::Ok().body(
hb.render(
"main",
&MainContext {
flash_messages,
base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
logged_user: logged_user.clone(),
&Context {
base,
contests: get_formatted_contests(&mut connection, logged_user.map(|u| u.id), &tz)?,
submissions: submissions
.iter()
......@@ -1556,22 +1552,19 @@ async fn get_contests(
tz: web::Data<Tz>,
) -> GetResult {
let logged_user = require_identity(&identity)?;
let base = get_base_context(Some(require_identity(&identity)?), flash_messages);
#[derive(Serialize)]
struct ContestsContext {
logged_user: LoggedUser,
flash_messages: IncomingFlashMessages,
base_url: String,
struct Context {
base: BaseContext,
contests: Vec<FormattedContest>,
}
let mut connection = pool.get()?;
Ok(HttpResponse::Ok().body(hb.render(
"contests",
&ContestsContext {
logged_user: logged_user.clone(),
flash_messages,
base_url: env::var("BASE_URL").expect("BASE_URL environment variable is not set"),
&Context {
base,
contests: get_formatted_contests(&mut connection, Some(logged_user.id), &tz)?,
},
)?))
......
<!DOCTYPE html>
<head>
<title>Juĝisto · {{ title }}</title>
<base href="{{ base_url }}">
<base href="{{ base.base_url }}">
<meta charset="utf-8"/>
<link rel="stylesheet" href="{{ base_url }}static/styles.css"/>
<link rel="stylesheet" href="static/styles.css"/>
<link rel="stylesheet" data-name="vs/editor/editor.main" href="https://unpkg.com/monaco-editor@0.21.2/min/vs/editor/editor.main.css"/>
<script src="https://unpkg.com/htmx.org@1.5.0"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
......@@ -11,29 +11,29 @@
</head>
<body>
<header>
<h1><a href="{{base_url}}">Juĝisto</a></h1>
<h1><a href=".">Juĝisto</a></h1>
<nav>
<a href="{{base_url}}">Início</a>
<a href="{{base_url}}contests/">Competições</a>
<a href="{{base_url}}problems/">Problemas</a>
<a href="{{base_url}}submissions/">Submissões</a>
<a href="{{base_url}}setting/">Criações</a>
<a href="{{base_url}}about/">Sobre</a>
<a href=".">Início</a>
<a href="contests/">Competições</a>
<a href="problems/">Problemas</a>
<a href="submissions/">Submissões</a>
<a href="setting/">Criações</a>
<a href="about/">Sobre</a>
</nav>
<div class="span"></div>
<div class="logged">
{{ #if logged_user }}
<a href="{{base_url}}me">{{ logged_user.name }}{{ #if logged_user.is_admin }} (administrador){{ /if }}</a>
<form id="logout-form" method="post" action="{{base_url}}logout">
{{ #if base.logged_user }}
<a href="me">{{ base.logged_user.name }}{{ #if base.logged_user.is_admin }} (administrador){{ /if }}</a>
<form id="logout-form" method="post" action="logout">
<button type="submit">sair</button>
</form>
{{ else }}
<a href="{{base_url}}login">entrar</a>
<a href="login">entrar</a>
{{ /if }}
</div>
</header>
{{ #if flash_messages }}
{{ #each flash_messages }}
{{ #if base.flash_messages }}
{{ #each base.flash_messages }}
{{ #each this }}
<div class="flash-message flash-{{ this.level }}">
{{ this.content }}
......
{{ #> base title="Competição" }}
<div id="contest">
<div id="breadcrumb">
<a href="{{base_url}}">Início</a>
<a href=".">Início</a>
/
<a href="{{base_url}}contests/">Competições</a>
<a href="contests/">Competições</a>
/
<a href="{{base_url}}contests/{{contest.id}}">{{contest.name}}</a>
<a href="contests/{{contest.id}}">{{contest.name}}</a>
<div class="span"></div>
<a href="{{base_url}}contests/{{contest.id}}/scoreboard">
<a href="contests/{{contest.id}}/scoreboard">
Ver Placar ►
</a>
</div>
<div id="problems">
{{ #each problems }}
<a href="{{base_url}}contests/{{ ../contest.id }}/{{ this.label }}" class="problem">
<a href="contests/{{ ../contest.id }}/{{ this.label }}" class="problem">
<div class="problem-info">
<div class="name">
{{ this.label }} · {{ this.name }}
......@@ -55,9 +55,9 @@
</div>
</div>
<div id="submissions" hx-sse="connect:{{base_url}}submission_updates/">
<div id="submissions" hx-sse="connect:submission_updates/">
Submissões
<div id="submissions-list" hx-get="{{base_url}}submissions/me/contests/{{ contest.id }}" hx-trigger="load, sse:update_submission">
<div id="submissions-list" hx-get="submissions/me/contests/{{ contest.id }}" hx-trigger="load, sse:update_submission">
{{> submissions }}
</div>
</div>
......
{{ #> base title="Competição" }}
<div id="problem">
<div id="breadcrumb">
<a href="{{base_url}}">Início</a>
<a href=".">Início</a>
/
<a href="{{base_url}}contests/">Competições</a>
<a href="contests/">Competições</a>
/
<a href="{{base_url}}contests/{{ contest.id }}">{{ contest.name }}</a>
<a href="contests/{{ contest.id }}">{{ contest.name }}</a>
/
<a href="{{base_url}}contests/{{ contest.id }}/{{ problem.label }}">{{ problem.label }} · {{ problem.name }}</a>
<a href="contests/{{ contest.id }}/{{ problem.label }}">{{ problem.label }} · {{ problem.name }}</a>
</div>
<div id="statement-submission">
<iframe src="{{base_url}}problems/{{problem.id}}/assets/problem.html" id="statement"></iframe>
<form id="submission" method="post" action="{{base_url}}submissions/">
<iframe src="problems/{{problem.id}}/assets/problem.html" id="statement"></iframe>
<form id="submission" method="post" action="submissions/">
<input type="hidden" name="contest_problem_id" value="{{ problem.id }}">
<label for="language">Linguagem</label>
<select id="language" name="language">
......@@ -39,9 +39,9 @@
</div>
</div>
<div id="submissions" hx-sse="connect:{{base_url}}submission_updates/">
<div id="submissions" hx-sse="connect:submission_updates/">
Submissões
<div id="submissions-list" hx-get="{{base_url}}submissions/me/contests/{{ contest.id }}/{{ problem.label }}" hx-trigger="load, sse:update_submission">
<div id="submissions-list" hx-get="submissions/me/contests/{{ contest.id }}/{{ problem.label }}" hx-trigger="load, sse:update_submission">
{{> submissions }}
</div>
</div>
......
{{#> base title="Competições"}}
<div id="contests">
<div id="breadcrumb">
<a href="{{base_url}}">Início</a>
<a href=".">Início</a>
/
<a href="{{base_url}}contests/">Competições</a>
<a href="contests/">Competições</a>
</div>
<table>
......@@ -18,18 +18,18 @@
<tbody>
{{ #each contests }}
<tr>
<td><a href="{{base_url}}contests/{{ this.id }}">{{ this.name }}</a></td>
<td class="right"><a href="{{base_url}}contests/{{ this.id }}">{{ this.start_instant }}</a></td>
<td class="right"><a href="{{base_url}}contests/{{ this.id }}">{{ this.end_instant }}</a></td>
<td class="right"><a href="{{base_url}}contests/{{ this.id }}">{{ this.creation_instant }}</a></td>
<td><a href="contests/{{ this.id }}">{{ this.name }}</a></td>
<td class="right"><a href="contests/{{ this.id }}">{{ this.start_instant }}</a></td>
<td class="right"><a href="contests/{{ this.id }}">{{ this.end_instant }}</a></td>
<td class="right"><a href="contests/{{ this.id }}">{{ this.creation_instant }}</a></td>
</tr>
{{ /each }}
</tbody>
</table>
</div>
{{#if logged_user.is_admin }}
<form id="create-contest-form" hx-target="body" hx-swap="innerHTML" hx-encoding="multipart/form-data" hx-post="{{base_url}}contests/">
{{#if base.logged_user.is_admin }}
<form id="create-contest-form" hx-target="body" hx-swap="innerHTML" hx-encoding="multipart/form-data" hx-post="contests/">
<label for="name">
Nome
</label>
......
{{ #> base title="Entrar" }}
<form type="submit" method="post" action="{{base_url}}login" id="login-form">
<form type="submit" method="post" action="login" id="login-form">
<label for="name">
Usuário
</label>
......
{{ #> base title="Início" }}
<div id="contests">
{{ #each contests }}
<a href="{{base_url}}contests/{{ this.id }}" class="contest">
<a href="contests/{{ this.id }}" class="contest">
<div class="contest-info">
<div class="name">{{ this.name }}</div>
<div class="extra">{{ this.start_instant }}{{ this.end_instant }}</div>
......@@ -33,10 +33,10 @@
{{ /each }}
</div>
{{#if logged_user.is_admin}}
<div id="submissions" hx-sse="connect:{{base_url}}submission_updates/">
{{#if base.logged_user.is_admin}}
<div id="submissions" hx-sse="connect:submission_updates/">
Submissões
<div id="submissions-list" hx-get="{{base_url}}submissions/" hx-trigger="load, sse:update_submission">
<div id="submissions-list" hx-get="submissions/" hx-trigger="load, sse:update_submission">
{{> submissions }}
</div>
</div>
......
{{#> base title="Eu"}}
<form id="change-password" method="post" action="{{base_url}}me/password">
<form id="change-password" method="post" action="me/password">
<label for="old_password">
Senha antiga
</label>
......@@ -17,8 +17,8 @@
</button>
</form>
{{#if logged_user.is_admin}}
<form id="create-user" method="post" action="{{base_url}}users/">
{{#if base.logged_user.is_admin}}
<form id="create-user" method="post" action="users/">
<label for="name">
Nome
</label>
......@@ -36,7 +36,7 @@
</button>
</form>
<form id="impersonate-user" method="post" action="{{base_url}}impersonate/">
<form id="impersonate-user" method="post" action="impersonate/">
<label for="name">
Nome
</label>
......
{{ #> base title="Competição" }}
<div id="contest">
<div id="breadcrumb">
<a href="{{base_url}}">Início</a>
<a href=".">Início</a>
/
<a href="{{base_url}}contests/">Competições</a>
<a href="contests/">Competições</a>
/
<a href="{{base_url}}contests/{{contest.id}}">{{contest.name}}</a>
<a href="contests/{{contest.id}}">{{contest.name}}</a>
/
<a href="{{base_url}}contests/{{contest.id}}/scoreboard">Placar</a>
<a href="contests/{{contest.id}}/scoreboard">Placar</a>
</div>
<div id="scoreboard">
......@@ -72,9 +72,9 @@
</div>
</div>
<div id="submissions" hx-sse="connect:{{base_url}}submission_updates/">
<div id="submissions" hx-sse="connect:submission_updates/">
Submissões
<div id="submissions-list" hx-get="{{base_url}}submissions/me/contests/{{ contest.id }}" hx-trigger="load, sse:update_submission">
<div id="submissions-list" hx-get="submissions/me/contests/{{ contest.id }}" hx-trigger="load, sse:update_submission">
{{> submissions }}
</div>
</div>
......
......@@ -16,10 +16,10 @@ function closeModal() {
<div>Tempo de parede: {{submission.time_wall_ms}}ms</div>
<div>Código-fonte:</div>
<textarea class="source-text" readonly>{{submission.source_text}}</textarea>
{{#if logged_user.is_admin}}
{{#if base.logged_user.is_admin}}
<div>Saída de erro:</div>
<textarea class="error-output" readonly>{{submission.error_output}}</textarea>
<button hx-post="{{base_url}}submissions/{{submission.uuid}}/rejudge" hx-target="body">Rejulgar</button>
<button hx-post="submissions/{{submission.uuid}}/rejudge" hx-target="body">Rejulgar</button>
{{/if}}
<button onclick="closeModal()">Fechar</button>
</div>
......
{{ #each submissions }}
{{ #if (eq this.verdict "WJ") }}
<div id="submission-{{ this.uuid }}" class="submission waiting-judge" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div id="submission-{{ this.uuid }}" class="submission waiting-judge" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div class="uuid">{{ this.uuid }}</div>
<div class="description">
<div class="lds-hourglass"></div>
<div class="verdict">WJ</div> · {{ this.problem_label }} · {{ this.submission_instant }}
</div>
<div class="extra-info">
{{#if ../logged_user.is_admin}} {{this.user_name}} {{/if}}
{{#if ../base.logged_user.is_admin}} {{this.user_name}} {{/if}}
</div>
</div>
{{ /if }}
{{ #if (eq this.verdict "AC") }}
<div id="submission-{{ this.uuid }}" class="submission accepted" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div id="submission-{{ this.uuid }}" class="submission accepted" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div class="uuid">{{ this.uuid }}</div>
<div class="description">
<div class="verdict">AC</div> · {{ this.problem_label }} · {{ this.submission_instant }}
</div>
<div class="extra-info">
{{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
{{#if ../logged_user.is_admin}} · {{this.user_name}} {{/if}}
{{#if ../base.logged_user.is_admin}} · {{this.user_name}} {{/if}}
</div>
</div>
{{ /if }}
{{ #if (eq this.verdict "WA") }}
<div id="submission-{{ this.uuid }}" class="submission wrong-answer" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div id="submission-{{ this.uuid }}" class="submission wrong-answer" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div class="uuid">{{ this.uuid }}</div>
<div class="description">
<div class="verdict">WA</div> · {{ this.problem_label }} · {{ this.submission_instant }}
</div>
<div class="extra-info">
{{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
{{#if ../logged_user.is_admin}} · {{this.user_name}} {{/if}}
{{#if ../base.logged_user.is_admin}} · {{this.user_name}} {{/if}}
</div>
{{#if this.failed_test}}
<div class="failed-test">
......@@ -42,34 +42,34 @@
</div>
{{ /if }}
{{ #if (eq this.verdict "RE") }}
<div id="submission-{{ this.uuid }}" class="submission runtime-error" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div id="submission-{{ this.uuid }}" class="submission runtime-error" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div class="uuid">{{ this.uuid }}</div>
<div class="description">
<div class="verdict">RE</div> · {{ this.problem_label }} · {{ this.submission_instant }}
</div>
<div class="extra-info">
{{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
{{#if ../logged_user.is_admin}} · {{this.user_name}} {{/if}}
{{#if ../base.logged_user.is_admin}} · {{this.user_name}} {{/if}}
</div>
{{#if this.failed_test}}
<div class="failed-test">
Falhou no teste {{this.failed_test}}
</div>
{{/if}}
{{#if ../logged_user.is_admin}}
{{#if ../base.logged_user.is_admin}}
<div class="compilation-result">{{ this.error_output }}</div>
{{/if}}
</div>
{{ /if }}
{{ #if (eq this.verdict "ML") }}
<div id="submission-{{ this.uuid }}" class="submission memory-limit" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div id="submission-{{ this.uuid }}" class="submission memory-limit" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div class="uuid">{{ this.uuid }}</div>
<div class="description">
<div class="verdict">ML</div> · {{ this.problem_label }} · {{ this.submission_instant }}
</div>
<div class="extra-info">
{{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
{{#if ../logged_user.is_admin}} · {{this.user_name}} {{/if}}
{{#if ../base.logged_user.is_admin}} · {{this.user_name}} {{/if}}
</div>
{{#if this.failed_test}}
<div class="failed-test">
......@@ -79,14 +79,14 @@
</div>
{{ /if }}
{{ #if (eq this.verdict "TL") }}
<div id="submission-{{ this.uuid }}" class="submission time-limit" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div id="submission-{{ this.uuid }}" class="submission time-limit" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div class="uuid">{{ this.uuid }}</div>
<div class="description">
<div class="verdict">TL</div> · {{ this.problem_label }} · {{ this.submission_instant }}
</div>
<div class="extra-info">
{{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
{{#if ../logged_user.is_admin}} · {{this.user_name}} {{/if}}
{{#if ../base.logged_user.is_admin}} · {{this.user_name}} {{/if}}
</div>
{{#if this.failed_test}}
<div class="failed-test">
......@@ -96,13 +96,13 @@
</div>
{{ /if }}
{{ #if (eq this.verdict "CE") }}
<div id="submission-{{ this.uuid }}" class="submission compilation-error" hx-get="{{../base_url}}submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div id="submission-{{ this.uuid }}" class="submission compilation-error" hx-get="submissions/{{this.uuid}}" hx-target="body" hx-swap="beforeend">
<div class="uuid">{{ this.uuid }}</div>
<div class="description">
<div class="verdict">CE</div> · {{ this.problem_label }} · {{ this.submission_instant }}
</div>
<div class="compilation-result">{{ this.error_output }}</div>
{{#if ../logged_user.is_admin}}
{{#if ../base.logged_user.is_admin}}
<div class="extra-info">
{{this.time_ms}}ms {{#if this.memory}} · {{this.memory}}{{/if}}
· {{this.user_name}}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment