diff --git a/src/main.rs b/src/main.rs index 05244235292bf34b784120d3381a48b316e82882..d2c06741686da039f28d8c43b26c4203db5d71c9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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)?, }, )?)) diff --git a/templates/base.hbs b/templates/base.hbs index c9cd859e68495fa04747acbea6657a2d2bdceb3d..42fd43a1db872ad084f3f8c27c2bedc80b322d03 100644 --- a/templates/base.hbs +++ b/templates/base.hbs @@ -1,9 +1,9 @@ <!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 }} diff --git a/templates/contest.hbs b/templates/contest.hbs index 5070a8578c259f8c5fec7d899d2ea23f8964714d..b26f20efc405d0997c8a9302c4d18d415fde170d 100644 --- a/templates/contest.hbs +++ b/templates/contest.hbs @@ -1,20 +1,20 @@ {{ #> 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> diff --git a/templates/contest_problem.hbs b/templates/contest_problem.hbs index 897684e34a9accc3f67c4ea26e193c2e21f3759e..4853b0501cd36ee0e248726118b1beef529f33f6 100644 --- a/templates/contest_problem.hbs +++ b/templates/contest_problem.hbs @@ -1,18 +1,18 @@ {{ #> 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> diff --git a/templates/contests.hbs b/templates/contests.hbs index 0fca8dcb0c51d023b8f39b4d91546afe9b37cdc6..a209155d64de2734e1267547bfa941d47537303e 100644 --- a/templates/contests.hbs +++ b/templates/contests.hbs @@ -1,9 +1,9 @@ {{#> 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> diff --git a/templates/login.hbs b/templates/login.hbs index ae522224d868d926aa4235b999c6f94cb3ab0e57..45f6bee8da7b6cb7a049bc1c381581e861dea5d8 100644 --- a/templates/login.hbs +++ b/templates/login.hbs @@ -1,5 +1,5 @@ {{ #> 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> diff --git a/templates/main.hbs b/templates/main.hbs index 678817985679c4f977af865ac7c163b55c889f4a..e19e1f908e7a7a1002d398067fa9351d194b5e56 100644 --- a/templates/main.hbs +++ b/templates/main.hbs @@ -1,7 +1,7 @@ {{ #> 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> diff --git a/templates/me.hbs b/templates/me.hbs index 12f959aae46b0bd7259bd476a67e3a8ea6ab0091..929c9a035ef1dc0b920070bb0627b6c783c128ac 100644 --- a/templates/me.hbs +++ b/templates/me.hbs @@ -1,5 +1,5 @@ {{#> 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> diff --git a/templates/scoreboard.hbs b/templates/scoreboard.hbs index 7576f17893a0415979c957eba2523ef1c0a083cd..f3cb6c9cbda1ce32229c1e1e3618de5398f22225 100644 --- a/templates/scoreboard.hbs +++ b/templates/scoreboard.hbs @@ -1,13 +1,13 @@ {{ #> 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> diff --git a/templates/submission.hbs b/templates/submission.hbs index 834f4bd72ac6d939b870fff99f188ee67753da29..189b3e13a04bc6e919dcd05910bfcc832d4d8171 100644 --- a/templates/submission.hbs +++ b/templates/submission.hbs @@ -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> diff --git a/templates/submissions.hbs b/templates/submissions.hbs index 7d54057b69b3bd4464ae920414c7010b2be6a186..5a7b443ed2a755bc0cf85511dc9edff8b86478da 100644 --- a/templates/submissions.hbs +++ b/templates/submissions.hbs @@ -1,37 +1,37 @@ {{ #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}}