feat: implement prototype
This commit is contained in:
parent
4c5873ec96
commit
7d5e336868
194
Cargo.lock
generated
Normal file
194
Cargo.lock
generated
Normal file
@ -0,0 +1,194 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "askama"
|
||||
version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1bf825125edd887a019d0a3a837dcc5499a68b0d034cc3eb594070c3e18addc"
|
||||
dependencies = [
|
||||
"askama_macros",
|
||||
"itoa",
|
||||
"percent-encoding",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "askama_derive"
|
||||
version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e1c7065972a130eafa84215f21352ae15b4a7393da48c1f5e103904490736738"
|
||||
dependencies = [
|
||||
"askama_parser",
|
||||
"basic-toml",
|
||||
"glob",
|
||||
"memchr",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustc-hash",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "askama_macros"
|
||||
version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e23b1d2c4bd39a41971f6124cef4cc6fd0540913ecb90919b69ab3bbe44ae1a"
|
||||
dependencies = [
|
||||
"askama_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "askama_parser"
|
||||
version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7db09fde9143e7ac4513358fb32ee32847125b63b18ea715afd487956da715da"
|
||||
dependencies = [
|
||||
"rustc-hash",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"unicode-ident",
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "basic-toml"
|
||||
version = "0.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
|
||||
|
||||
[[package]]
|
||||
name = "percent-encoding"
|
||||
version = "2.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.106"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.45"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-hash"
|
||||
version = "2.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.228"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_core"
|
||||
version = "1.0.228"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.228"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.150"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"memchr",
|
||||
"serde",
|
||||
"serde_core",
|
||||
"zmij",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.117"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thek4n-ru"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"askama",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
||||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "1.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zmij"
|
||||
version = "1.0.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
|
||||
@ -5,3 +5,4 @@ edition = "2024"
|
||||
authors = ["Vladislav Kan <thek4n@yandex.ru>"]
|
||||
|
||||
[dependencies]
|
||||
askama = "0.16.0"
|
||||
|
||||
@ -1,22 +1,30 @@
|
||||
[page]
|
||||
page-title = "thek4n"
|
||||
page-meta-desc = "thek4n - developer"
|
||||
copyright-author = "thek4n"
|
||||
title = "Hi, I'm Vlad"
|
||||
meta_title = "thek4n"
|
||||
meta_description = "thek4n - developer"
|
||||
description = "Developer"
|
||||
copyright_author = "thek4n"
|
||||
|
||||
|
||||
# ---
|
||||
|
||||
|
||||
# Site registered languages
|
||||
[languages]
|
||||
en = "english"
|
||||
ru = "russian"
|
||||
[[languages]]
|
||||
key = "en"
|
||||
title = "english"
|
||||
|
||||
[[languages]]
|
||||
key = "ru"
|
||||
title = "russian"
|
||||
|
||||
|
||||
# ---
|
||||
|
||||
|
||||
[aboutme]
|
||||
[page.aboutme]
|
||||
title.en = "About Me"
|
||||
title.ru = "Обо Мне"
|
||||
text.en = '''
|
||||
|
||||
'''
|
||||
@ -29,16 +37,22 @@ text.ru = '''
|
||||
# ---
|
||||
|
||||
|
||||
[gpg]
|
||||
[page.gpg]
|
||||
title.en = "GPG Public Key"
|
||||
title.ru = "Публичный ключ GPG"
|
||||
url = "/gpgkey.txt"
|
||||
showkey-text.en = "Show key"
|
||||
showkey-text.ru = "Показать ключ"
|
||||
url_title = "thek4n.ru/gpgkey.txt"
|
||||
showkey_title.en = "Show key"
|
||||
showkey_title.ru = "Показать ключ"
|
||||
|
||||
availat-text.en = "Available at"
|
||||
availat-text.ru = "Доступен по"
|
||||
availat_title.en = "Available at"
|
||||
availat_title.ru = "Доступен по"
|
||||
|
||||
copied-text.en = "Copied!"
|
||||
copied-text.ru = "Скопировано!"
|
||||
copy_title.en = "Show key"
|
||||
copy_title.ru = "Показать ключ"
|
||||
|
||||
copied_title.en = "Copied!"
|
||||
copied_title.ru = "Скопировано!"
|
||||
|
||||
value = '''
|
||||
asdfasdf
|
||||
@ -49,22 +63,31 @@ asdfasdf
|
||||
|
||||
# ---
|
||||
|
||||
[page.projects]
|
||||
title.en = "Projects"
|
||||
title.ru = "Проекты"
|
||||
|
||||
[[projects]]
|
||||
title = "ip.thek4n.ru"
|
||||
url = "https://ip.thek4n.ru"
|
||||
source_url = "https://gitea.thek4n.ru/thek4n/ip.thek4n.ru"
|
||||
source_url_title = "thek4n/ip.thek4n.ru"
|
||||
description.en = "check my ip service"
|
||||
description.ru = "сервис определения ip"
|
||||
|
||||
[[projects]]
|
||||
title = "paste.thek4n.ru"
|
||||
url = "https://paste.thek4n.ru"
|
||||
source_url = "https://gitea.thek4n.ru/thek4n/paste.thek4n.ru"
|
||||
source_url_title = "thek4n/paste.thek4n.ru"
|
||||
description.en = "copy/paste and url shortener service"
|
||||
description.ru = "укоротитель ссылок"
|
||||
|
||||
[[projects]]
|
||||
title = "thek4n.ru"
|
||||
url = "https://thek4n.ru"
|
||||
source_url = "https://gitea.thek4n.ru/thek4n/thek4n.ru"
|
||||
source_url_title = "thek4n/thek4n.ru"
|
||||
description.en = "this site source"
|
||||
description.ru = "исходники этого сайта"
|
||||
|
||||
@ -72,20 +95,24 @@ description.ru = "исходники этого сайта"
|
||||
# ---
|
||||
|
||||
|
||||
[page.contacts]
|
||||
title.en = "Contacts"
|
||||
title.ru = "Контакты"
|
||||
|
||||
[[contacts]]
|
||||
name.en = "Telegram"
|
||||
name.ru = "Телеграм"
|
||||
site_name.en = "Telegram"
|
||||
site_name.ru = "Телеграм"
|
||||
title = "@thek4n"
|
||||
url = "https://t.me/thek4n"
|
||||
|
||||
[[contacts]]
|
||||
name.en = "Github"
|
||||
name.ru = "Github"
|
||||
site_name.en = "Github"
|
||||
site_name.ru = "Github"
|
||||
title = "github.com/thek4n"
|
||||
url = "https://github.com/thek4n"
|
||||
|
||||
[[contacts]]
|
||||
name.en = "Email"
|
||||
name.ru = "Почта"
|
||||
site_name.en = "Email"
|
||||
site_name.ru = "Почта"
|
||||
title = "thek4n@yandex.ru"
|
||||
url = "mailto:thek4n@yandex.ru"
|
||||
|
||||
82
index.html
Normal file
82
index.html
Normal file
@ -0,0 +1,82 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>thek4n</title>
|
||||
<meta name="description" content="thek4n - developer">
|
||||
<link rel="icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<div class="top-controls">
|
||||
<div>
|
||||
|
||||
<a id="lang-en" class="active" href="https://thek4n.ru/en">English</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<h1>TheK4n</h1>
|
||||
<p><small>Developer</small></p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h1>Projects</h1>
|
||||
|
||||
<p>
|
||||
<span><a href="https://paste.thek4n.ru">project</a></span>
|
||||
:
|
||||
<span><a href="https://gitea.thek4n.ru/thek4n/paste.thek4n.ru">thek4n/paste.thek4n.ru</a></span>
|
||||
<span><small class="muted">(copy/paste service)</small>
|
||||
</p>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h1>About Me</h1>
|
||||
<p>About me text</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>GPG</h2>
|
||||
|
||||
<p>
|
||||
<span>Available at</span>
|
||||
<a href="/gpgkey.txt" target="_blank" rel="noopener noreferrer" >thek4n.ru/gpgkey.txt</a>
|
||||
</p>
|
||||
|
||||
<details class="gpg-details">
|
||||
<summary>
|
||||
::marker
|
||||
<span class="summary-row">
|
||||
Show key
|
||||
<a id="copy-gpg" class="copy-link" href="#" onclick="copyGPGKey()">Copy</a>
|
||||
</span>
|
||||
key....
|
||||
</summary>
|
||||
</details>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Contacts</h2>
|
||||
|
||||
<p>
|
||||
<span>Telegram</span>
|
||||
:
|
||||
<span><a href="https://t.me/thek4n">@thek4n</a></span>
|
||||
</p>
|
||||
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<p>© 2026 Vladislav Kan <thek4n@yandex.ru></p>
|
||||
</footer>
|
||||
</main>
|
||||
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
152
src/main.rs
152
src/main.rs
@ -1,3 +1,151 @@
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
use askama::Template;
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "html_index.jinja2")]
|
||||
struct HtmlPageTemplate<'a> {
|
||||
title: &'a str,
|
||||
description: &'a str,
|
||||
copyright_author: &'a str,
|
||||
base_url: &'a str,
|
||||
meta: PageMeta<'a>,
|
||||
year: &'a str,
|
||||
aboutme: AboutMeSection<'a>,
|
||||
gpg_section: GPGSection<'a>,
|
||||
contacts_section: ContactsSection<'a>,
|
||||
projects_section: ProjectsSection<'a>,
|
||||
languages: Vec<Language<'a>>,
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "text_index.jinja2", escape = "none")]
|
||||
struct TextPageTemplate<'a> {
|
||||
title: &'a str,
|
||||
description: &'a str,
|
||||
copyright_author: &'a str,
|
||||
base_url: &'a str,
|
||||
meta: PageMeta<'a>,
|
||||
year: &'a str,
|
||||
aboutme_section: AboutMeSection<'a>,
|
||||
gpg_section: GPGSection<'a>,
|
||||
contacts_section: ContactsSection<'a>,
|
||||
projects_section: ProjectsSection<'a>,
|
||||
languages: Vec<Language<'a>>,
|
||||
}
|
||||
|
||||
struct PageMeta<'a> {
|
||||
title: &'a str,
|
||||
description: &'a str,
|
||||
}
|
||||
|
||||
struct AboutMeSection<'a> {
|
||||
title: &'a str,
|
||||
text: &'a str,
|
||||
}
|
||||
|
||||
struct GPGSection<'a> {
|
||||
title: &'a str,
|
||||
availat_title: &'a str,
|
||||
url: &'a str,
|
||||
url_title: &'a str,
|
||||
showkey_title: &'a str,
|
||||
copy_title: &'a str,
|
||||
value: &'a str,
|
||||
}
|
||||
|
||||
struct ContactsSection<'a> {
|
||||
title: &'a str,
|
||||
contacts: Vec<Contact<'a>>,
|
||||
}
|
||||
|
||||
struct Contact<'a> {
|
||||
site_name: &'a str,
|
||||
url: &'a str,
|
||||
title: &'a str,
|
||||
}
|
||||
|
||||
struct ProjectsSection<'a> {
|
||||
title: &'a str,
|
||||
projects: Vec<Project<'a>>,
|
||||
}
|
||||
|
||||
struct Project<'a> {
|
||||
title: &'a str,
|
||||
url: &'a str,
|
||||
source_url: &'a str,
|
||||
source_url_title: &'a str,
|
||||
description: &'a str,
|
||||
}
|
||||
|
||||
struct Language<'a> {
|
||||
key: &'a str,
|
||||
current: bool,
|
||||
value: &'a str,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let meta = PageMeta{
|
||||
title: "thek4n",
|
||||
description: "thek4n - developer",
|
||||
};
|
||||
|
||||
let aboutme_section = AboutMeSection{
|
||||
title: "About Me",
|
||||
text: "About me text",
|
||||
};
|
||||
|
||||
let gpg_section = GPGSection{
|
||||
title: "GPG Key",
|
||||
availat_title: "Available at",
|
||||
url: "/gpgkey.txt",
|
||||
url_title: "thek4n.ru/gpgkey.txt",
|
||||
showkey_title: "Show key",
|
||||
copy_title: "Copy",
|
||||
value: "key....",
|
||||
};
|
||||
|
||||
let contacts = vec![Contact{
|
||||
site_name: "Telegram",
|
||||
url: "https://t.me/thek4n",
|
||||
title: "@thek4n",
|
||||
}];
|
||||
|
||||
let contacts_section = ContactsSection{
|
||||
title: "Contacts",
|
||||
contacts,
|
||||
};
|
||||
|
||||
let projects = vec![Project{
|
||||
title: "project",
|
||||
url: "https://paste.thek4n.ru",
|
||||
source_url: "https://gitea.thek4n.ru/thek4n/paste.thek4n.ru",
|
||||
source_url_title: "thek4n/paste.thek4n.ru",
|
||||
description: "copy/paste service",
|
||||
}];
|
||||
|
||||
let projects_section = ProjectsSection{
|
||||
title: "Projects",
|
||||
projects,
|
||||
};
|
||||
|
||||
let languages = vec![Language{
|
||||
key: "en",
|
||||
current: true,
|
||||
value: "English",
|
||||
}];
|
||||
|
||||
let index = TextPageTemplate{
|
||||
title: "TheK4n",
|
||||
description: "Developer",
|
||||
copyright_author: "Vladislav Kan <thek4n@yandex.ru>",
|
||||
base_url: "https://thek4n.ru",
|
||||
meta,
|
||||
year: "2026", // todo: get current year
|
||||
aboutme_section,
|
||||
gpg_section,
|
||||
projects_section,
|
||||
contacts_section,
|
||||
languages,
|
||||
};
|
||||
|
||||
println!("{}", index.render().unwrap());
|
||||
}
|
||||
|
||||
81
templates/html_index.jinja2
Normal file
81
templates/html_index.jinja2
Normal file
@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ meta.title }}</title>
|
||||
<meta name="description" content="{{ meta.description }}">
|
||||
<link rel="icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<div class="top-controls">
|
||||
<div>
|
||||
{% for lang in languages %}
|
||||
<a id="lang-{{ lang.key }}" {% if lang.current %} class="active" {% endif %} href="{{ base_url }}?lang={{ lang.key }}">{{ lang.value }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<h1>{{ title }}</h1>
|
||||
<p><small>{{ description }}</small></p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h1>{{ projects_section.title }}</h1>
|
||||
{% for project in projects_section.projects %}
|
||||
<p>
|
||||
<span><a href="{{ project.url }}">{{ project.title }}</a></span>
|
||||
:
|
||||
<span><a href="{{ project.source_url }}">{{ project.source_url_title }}</a></span>
|
||||
<span><small class="muted">({{ project.description }})</small>
|
||||
</p>
|
||||
{% endfor %}
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h1>{{ aboutme.title }}</h1>
|
||||
<p>{{ aboutme.text }}</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>{{ gpg_section.title }}</h2>
|
||||
|
||||
<p>
|
||||
<span>{{ gpg_section.availat_title }}</span>
|
||||
<a href="{{ gpg_section.url }}" target="_blank" rel="noopener noreferrer" >{{ gpg_section.url_title }}</a>
|
||||
</p>
|
||||
|
||||
<details class="gpg-details">
|
||||
<summary>
|
||||
<span class="summary-row">
|
||||
{{ gpg_section.showkey_title }}
|
||||
<a id="copy-gpg" class="copy-link" href="#" onclick="copyGPGKey()">{{ gpg_section.copy_title }}</a>
|
||||
</span>
|
||||
{{ gpg_section.value }}
|
||||
</summary>
|
||||
</details>
|
||||
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>{{ contacts_section.title }}</h2>
|
||||
{% for contact in contacts_section.contacts %}
|
||||
<p>
|
||||
<span>{{ contact.site_name }}</span>
|
||||
:
|
||||
<span><a href="{{ contact.url }}">{{ contact.title }}</a></span>
|
||||
</p>
|
||||
{% endfor %}
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<p>© {{ year }} {{ copyright_author }}</p>
|
||||
</footer>
|
||||
</main>
|
||||
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,58 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ PAGE TITLE }}</title>
|
||||
<meta name="description" content="{{ META DESCRIPTION }}">
|
||||
<link rel="icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<div class="top-controls">
|
||||
<div>
|
||||
<a id="lang-en" class="active" href="{{ URL }}/en">en</a>
|
||||
<a id="lang-ru" href="{{ URL }}/ru">ru</a>
|
||||
{{ LANGUAGES }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<h1 data-lang="en">{{ PAGE_TITLE }}</h1>
|
||||
<p data-lang="en"><small>{{ PAGE_DESCRIPTION }}</small></p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h1 data-lang="en">Projects</h1>
|
||||
<p data-lang="en"><small class="muted">service desc</small></p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>GPG Public Key</h2>
|
||||
|
||||
<p>
|
||||
<span data-lang="en">Available at:</span>
|
||||
<a href="{{ GPG KEY URL }}" target="_blank" rel="noopener noreferrer" >{{ GPG KEY URL }}</a>
|
||||
</p>
|
||||
|
||||
<details class="gpg-details">
|
||||
<summary data-lang="en">
|
||||
::marker
|
||||
<span class="summary-row">
|
||||
Show key
|
||||
<a id="copy-gpg" class="copy-link" href="#" onclick="copyGPGKey()">copy to clipboard</a>
|
||||
</span>
|
||||
</summary>
|
||||
</details>
|
||||
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<p>© {{ YEAR }} {{ COPYRIGHT_AUTHOR }}</p>
|
||||
</footer>
|
||||
</main>
|
||||
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
24
templates/text_index.jinja2
Normal file
24
templates/text_index.jinja2
Normal file
@ -0,0 +1,24 @@
|
||||
{{ title }} - {{ description }}
|
||||
|
||||
|
||||
{{ projects_section.title }}:
|
||||
{%- for project in projects_section.projects %}
|
||||
> {{ project.title }} ({{project.description}}) - {{ project.url }}
|
||||
{%- endfor %}
|
||||
|
||||
|
||||
{{ contacts_section.title }}:
|
||||
{%- for contact in contacts_section.contacts %}
|
||||
> {{ contact.site_name }}: {{ contact.title }}
|
||||
{%- endfor %}
|
||||
|
||||
|
||||
{{ gpg_section.title }}: {{ base_url }}{{ gpg_section.url }}
|
||||
|
||||
|
||||
{{ aboutme_section.title }}:
|
||||
{{ aboutme_section.text }}
|
||||
|
||||
|
||||
|
||||
© {{ year }} {{ copyright_author }}
|
||||
Loading…
x
Reference in New Issue
Block a user