This commit is contained in:
Ondrej Vlach 2023-11-26 21:16:35 +01:00
parent 933239a52d
commit 496c8dd6fd
4 changed files with 133 additions and 152 deletions

2
Cargo.lock generated
View File

@ -1133,7 +1133,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]] [[package]]
name = "ovlach_data" name = "ovlach_data"
version = "0.1.0" version = "0.1.0"
source = "git+https://glpat-Ju_qUN9Yh8qa5rEnd6T7:glpat-Ju_qUN9Yh8qa5rEnd6T7@gitlab.nanobyte.cz/ondrej/ov-site-api-data.git?branch=add_missing_fields#16c3522851e763b883c1bdc2a235bad039f943d9" source = "git+https://glpat-Ju_qUN9Yh8qa5rEnd6T7:glpat-Ju_qUN9Yh8qa5rEnd6T7@gitlab.nanobyte.cz/ondrej/ov-site-api-data.git?branch=add_missing_fields#c37450f5ea327f95325d4f2cc587a392e6e3bc9f"
dependencies = [ dependencies = [
"chrono", "chrono",
"rocket", "rocket",

View File

@ -4,7 +4,7 @@ use std::collections::HashMap;
use rocket::{*, fairing::AdHoc}; use rocket::{*, fairing::AdHoc};
use rocket_dyn_templates::{Template, tera::Value}; use rocket_dyn_templates::{Template, tera::Value};
use ::serde::Deserialize; use ::serde::Deserialize;
use tools::tera::{static_filter, translate_filter, calculate_age, insert_space_every}; use tools::tera::{static_filter, translate_filter, calculate_age, insert_space_every, lang_entity};
pub mod routes; pub mod routes;
pub mod services; pub mod services;
@ -34,6 +34,8 @@ pub fn rocket_builder() -> Rocket<Build> {
engines.tera.register_filter("translate", translate_filter); engines.tera.register_filter("translate", translate_filter);
engines.tera.register_filter("calculate_age", calculate_age); engines.tera.register_filter("calculate_age", calculate_age);
engines.tera.register_filter("insert_space_every", insert_space_every); engines.tera.register_filter("insert_space_every", insert_space_every);
// filters specific to API
engines.tera.register_filter("lang_entity", lang_entity);
Ok(()) Ok(())
}) })
).attach( ).attach(

View File

@ -22,6 +22,13 @@ pub fn translate_filter(
return Ok(rocket_dyn_templates::tera::Value::String(format!("{}", value.as_str().unwrap()))); // TODO: fix-me here! return Ok(rocket_dyn_templates::tera::Value::String(format!("{}", value.as_str().unwrap()))); // TODO: fix-me here!
} }
pub fn lang_entity(
value: &Value,
args: &HashMap<String, rocket_dyn_templates::tera::Value>
) -> Result<Value, Error> {
return Ok(rocket_dyn_templates::tera::Value::String(format!("{}", value.as_str().unwrap()))); // TODO: fix-me here!
}
pub fn insert_space_every( pub fn insert_space_every(
value: &Value, value: &Value,
args: &HashMap<String, rocket_dyn_templates::tera::Value> args: &HashMap<String, rocket_dyn_templates::tera::Value>

View File

@ -4,6 +4,7 @@
<div class="page-content"> <div class="page-content">
<div class="container"> <div class="container">
<div class="resume-container"> <div class="resume-container">
<div class="shadow-1-strong bg-white my-5" id="intro"> <div class="shadow-1-strong bg-white my-5" id="intro">
<div class="bg-info text-white"> <div class="bg-info text-white">
<div class="cover bg-image"><img src="{{ "images/header-background.jpg" | static(static_host = static_host) }}" /> <div class="cover bg-image"><img src="{{ "images/header-background.jpg" | static(static_host = static_host) }}" />
@ -98,86 +99,57 @@
</div> </div>
<div class="shadow-1-strong bg-white my-5 p-5" id="skills"> <div class="shadow-1-strong bg-white my-5 p-5" id="skills">
<div class="skills-section"> <div class="skills-section">
<h2 class="h2 fw-light mb-4">Professional Skills</h2> <h2 class="h2 fw-light mb-4">{{ "Professional Skills" | translate }}</h2>
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<div class="mb-3"><span class="fw-bolder">HTML</span> {% set arr_cnt = cv.skills | length %}
{% set split_index = arr_cnt / 2 | round(method="ceil") %}
{% for skill in cv.skills | slice(start = 0, end = split_index) %}
{{ split_index}}
<div class="mb-3"><span class="fw-bolder">{{ skill.name }}</span>
<div class="progress my-2 rounded" style="height: 20px"> <div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-info" role="progressbar" data-aos="zoom-in-right" data-aos-delay="100" data-aos-anchor=".skills-section" style="width: 95%;" aria-valuenow="95" aria-valuemin="0" aria-valuemax="100">Master</div> <div class="progress-bar bg-info" role="progressbar" data-aos="zoom-in-right" data-aos-delay="100"
data-aos-anchor=".skills-section" style="width: {% if skill.skill == "MASTER" %}100%{% endif %}{% if skill.skill == "EXPERT" %}75%{% endif %}{% if skill.skill == "INTERMEDIATE" %}50%{% endif %}{% if skill.skill == "BEGINER" %}25%{% endif %};"
aria-valuenow="95" aria-valuemin="0" aria-valuemax="100">
{{ skill.skill}}
</div> </div>
</div> </div>
<div class="mb-3"><span class="fw-bolder">CSS</span>
<div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-info" role="progressbar" data-aos="zoom-in-right" data-aos-delay="200" data-aos-anchor=".skills-section" style="width: 85%" aria-valuenow="85" aria-valuemin="0" aria-valuemax="100">Expert</div>
</div>
</div>
<div class="mb-3"><span class="fw-bolder">JavaScript</span>
<div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-info" role="progressbar" data-aos="zoom-in-right" data-aos-delay="300" data-aos-anchor=".skills-section" style="width: 75%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">Advance</div>
</div>
</div>
<div class="mb-3"><span class="fw-bolder">WordPress</span>
<div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-info" role="progressbar" data-aos="zoom-in-right" data-aos-delay="300" data-aos-anchor=".skills-section" style="width: 75%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">Advance</div>
</div>
</div> </div>
{% endfor %}
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="mb-3"><span class="fw-bolder">Adobe Photoshop</span> {% for skill in cv.skills | slice(start = split_index) %}
{{ split_index}}
<div class="mb-3"><span class="fw-bolder">{{ skill.name }}</span>
<div class="progress my-2 rounded" style="height: 20px"> <div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-secondary" role="progressbar" data-aos="zoom-in-right" data-aos-delay="400" data-aos-anchor=".skills-section" style="width: 95%" aria-valuenow="95" aria-valuemin="0" aria-valuemax="100">Master</div> <div class="progress-bar bg-info" role="progressbar" data-aos="zoom-in-right" data-aos-delay="100"
data-aos-anchor=".skills-section" style="width: {% if skill.skill == "MASTER" %}100%{% endif %}{% if skill.skill == "EXPERT" %}75%{% endif %}{% if skill.skill == "INTERMEDIATE" %}50%{% endif %}{% if skill.skill == "BEGINER" %}25%{% endif %};"
aria-valuenow="95" aria-valuemin="0" aria-valuemax="100">
{{ skill.skill}}
</div> </div>
</div> </div>
<div class="mb-3"><span class="fw-bolder">Adobe Illustrator</span>
<div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-secondary" role="progressbar" data-aos="zoom-in-right" data-aos-delay="400" data-aos-anchor=".skills-section" style="width: 90%" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100">Expert</div>
</div>
</div>
<div class="mb-3"><span class="fw-bolder">Sketch</span>
<div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-secondary" role="progressbar" data-aos="zoom-in-right" data-aos-delay="500" data-aos-anchor=".skills-section" style="width: 85%" aria-valuenow="85" aria-valuemin="0" aria-valuemax="100">Expert</div>
</div>
</div>
<div class="mb-3"><span class="fw-bolder">Adobe XD</span>
<div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-secondary" role="progressbar" data-aos="zoom-in-right" data-aos-delay="600" data-aos-anchor=".skills-section" style="width: 75%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">Beginner</div>
</div>
</div> </div>
{% endfor %}
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="shadow-1-strong bg-white my-5 p-5" id="experience"> <div class="shadow-1-strong bg-white my-5 p-5" id="experience">
<div class="work-experience-section"> <div class="work-experience-section">
<h2 class="h2 fw-light mb-4">Work Experience</h2> <h2 class="h2 fw-light mb-4">{{ "Professional Skills" | translate }}</h2>
<div class="timeline"> <div class="timeline">
<div class="timeline-card timeline-card-info" data-aos="fade-in" data-aos-delay="0"> {% for job in cv.jobs %}
<div class="timeline-card timeline-card-info" data-aos="fade-in" data-aos-delay="{{ loop.index * 100 }}">
<div class="timeline-head px-4 pt-3"> <div class="timeline-head px-4 pt-3">
<div class="h5">Frontend Developer <span class="text-muted h6">at Creative Agency</span></div> <div class="h5">{{ job.title | lang_entity }} <span class="text-muted h6">at {{ job.company }}</span></div>
</div> </div>
<div class="timeline-body px-4 pb-4"> <div class="timeline-body px-4 pb-4">
<div class="text-muted text-small mb-3">May, 2015 - Present</div> <div class="text-muted text-small mb-3">May, 2015 - Present</div>
<div>Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition.</div> <div>{{ job.description | lang_entity }} </div>
</div>
</div>
<div class="timeline-card timeline-card-info" data-aos="fade-in" data-aos-delay="200">
<div class="timeline-head px-4 pt-3">
<div class="h5">Graphic Designer <span class="text-muted h6">at Design Studio</span></div>
</div>
<div class="timeline-body px-4 pb-4">
<div class="text-muted text-small mb-3">June, 2013 - May, 2015</div>
<div>Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line.</div>
</div>
</div>
<div class="timeline-card timeline-card-info" data-aos="fade-in" data-aos-delay="400">
<div class="timeline-head px-4 pt-3">
<div class="h5">Junior Web Developer <span class="text-muted h6">at Indie Studio</span></div>
</div>
<div class="timeline-body px-4 pb-4">
<div class="text-muted text-small mb-3">Jan, 2011 - May, 2013</div>
<div>User generated content in real-time will have multiple touchpoints for offshoring. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.</div>
</div> </div>
</div> </div>
{% endfor %}
</div> </div>
</div> </div>
</div> </div>