Compare commits

...

9 Commits

7 changed files with 109 additions and 97 deletions

View File

@ -7,14 +7,14 @@
h3 {
font-size: 1.1rem;
font-variant: normal;
text-align: left; }
font-size: 1.1rem;
font-variant: normal;
text-align: left; }
h4,
h5 {
text-indent: 1.5rem;
margin: 1rem 0 1rem 0; }
text-indent: 1.5rem;
margin: 1rem 0 1rem 0; }
:is(h3, h4, h5) a { color: var(--text-color); }
@ -22,39 +22,39 @@ h5 {
code,
pre {
font-family: 'Share Tech Mono';
font-size: 1.1rem;
letter-spacing: -1px; }
font-family: 'Share Tech Mono';
font-size: 1.1rem;
letter-spacing: -1px; }
pre {
border-left: 1px solid var(--primary-color);
padding-left: .25rem;
margin-bottom: .5rem;
margin-left: 1.6rem;
overflow-x: auto;
overflow-y: auto;
white-space: pre; }
border-left: 1px solid var(--primary-color);
padding-left: .25rem;
margin-bottom: .5rem;
margin-left: 1.6rem;
overflow-x: auto;
overflow-y: auto;
white-space: pre; }
article {
margin-top: 1rem;
max-width: 100%; }
margin-top: 1rem;
max-width: 100%; }
article:last-child { margin-bottom: 1rem; }
article header {
display: flex;
flex-direction: column; }
display: flex;
flex-direction: column; }
article header .menu {
display: flex;
font-size: .8rem;
justify-content: space-between; }
display: flex;
font-size: .8rem;
justify-content: space-between; }
article header nav a { font-variant: normal; }
article header nav ol {
counter-reset: item;
list-style-type: none; }
counter-reset: item;
list-style-type: none; }
article header nav ol > li { counter-increment: item; }

View File

@ -1,82 +1,86 @@
::placeholder { color: var(--primary-color); }
button.refresh:disabled {
color: gray;
cursor: progress; }
color: gray;
cursor: progress; }
#new-post {
display: grid;
gap: .5rem;
grid-template-areas:
"n w w"
"m m m"
"c a s";
grid-template-columns: 1fr 1fr 1fr; }
form {
display: grid;
gap: .5rem;
grid-template-areas:
"n w w"
"m m m"
"c a s";
grid-template-columns: 1fr 1fr 1fr; }
#new-post input[name="name"] { grid-area: n; }
:is(input, textarea):focus {
outline-color: var(--primary-color);
outline-style: solid;
outline-width: 1px; }
#new-post input[name="website"] { grid-area: w; }
input[name="name"] { grid-area: n; }
#new-post span.checkboxes { grid-area: c; }
input[name="website"] { grid-area: w; }
#new-post textarea {
grid-area: m;
height: 5.5rem;
max-width: 100%;
min-width: 100%; }
textarea {
grid-area: m;
height: 5.5rem;
max-width: 100%;
min-width: 100%; }
#new-post input[type="submit"] {
background-color: var(--primary-color);
border: none;
color: #f5f5f5;
font: inherit;
grid-area: s;
height: 2rem; }
input[type="text"],
textarea {
background-color: var(--background-color);
border: none;
border-bottom: 1px solid var(--primary-color);
color: var(--text-color);
font: inherit; }
#new-post input[type="submit"]:hover { background-color: var(--secondary-color); }
span.checkboxes { grid-area: c; }
#new-post span.checkbox:not(:last-child) { margin-right: 2rem; }
span.checkbox:not(:last-child) { margin-right: 2rem; }
#new-post input[type="text"],
#new-post textarea {
background-color: var(--background-color);
border: none;
border-bottom: 1px solid var(--primary-color);
color: var(--text-color);
font: inherit; }
span.captcha {
display: flex;
flex-basis: 100%;
grid-area: a;
justify-content: space-evenly; align-items: center; column-gap: .5rem; }
#new-post span.captcha {
display: flex;
flex-basis: 100%;
grid-area: a;
justify-content: space-evenly; align-items: center; column-gap: .5rem; }
span.captcha img {
height: 40px;
width: 160px; }
#new-post span.captcha img {
height: 40px;
width: 160px; }
span.captcha input[type="text"] { width: 4.5rem; text-align: center; height: 27px; }
#new-post span.captcha input[type="text"] { width: 4.5rem; text-align: center; height: 27px; }
input[type="submit"] {
background-color: var(--primary-color);
border: none;
color: #f5f5f5;
font: inherit;
grid-area: s;
height: 2rem; }
#posts article:not(:last-child) { margin-bottom: 1rem; }
input[type="submit"]:hover { background-color: var(--secondary-color); }
#posts article header { display: inline; font-size: .85rem; }
article:not(:last-child) { margin-bottom: 1rem; }
#posts article > *,
#posts article div.feedback > *,
#posts article div.feedback { margin-left: .5rem; }
article header { display: inline; font-size: .85rem; }
#posts article p.quote { font-style: italic; }
article > *,
article div.reply > * { margin-left: .5rem; }
article p.quote { font-style: italic; }
#pagination a:not(:first-child) { margin-left: .5rem; }
@media screen and (max-width: 641px) {
#new-post {
gap: 1.5rem;
grid-template-areas:
"n"
"w"
"m"
"c"
"a"
"s";
grid-template-columns: 1fr; } }
form {
gap: 1.5rem;
grid-template-areas:
"n"
"w"
"m"
"c"
"a"
"s";
grid-template-columns: 1fr; } }

View File

@ -4,10 +4,13 @@ header { position: relative; }
#logo { width: 100%; }
nav,
#services {
text-align: center;
width: 100%; }
nav a:last-child { margin-left: .6rem; }
nav,
#services { text-align: center; width: 100%; }
#services :is(a, span) { margin: .3rem; }

View File

@ -1,9 +1,9 @@
button:not(:last-child) { padding-right: 1rem; }
article header a { color: var(--text-color); }
article footer {
text-align: right;
padding: 0; }
text-align: right;
padding: 0; }
.hidden { display: none; }
button:not(:last-child) { padding-right: 1rem; }
.hidden { display: none; }

View File

@ -5,11 +5,15 @@ const captcha_hidden_field = document.forms[0].children[4].children[0];
let g_captcha_timeout_remain = g_captcha_timeout_seconds;
let g_current_captcha_id = captcha_hidden_field.value;
function getColorScheme() {
return window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
}
async function getNewCaptcha() {
const id = await fetch("/captcha/").then(r => r.text());
g_current_captcha_id = id;
captcha_hidden_field.value = id;
setTimeout(() => { captcha_img.src = `/captcha/${id}/image` }, 600);
setTimeout(() => { captcha_img.src = `/captcha/${id}/image?style=${getColorScheme()}` }, 600);
g_captcha_timeout_remain = g_captcha_timeout_seconds;
}
@ -29,12 +33,13 @@ captcha_refresh.addEventListener("click", async e => {
captcha_refresh.disabled = true;
setTimeout(async () => {
captcha_refresh.disabled = false;
await fetch(`/captcha/${g_current_captcha_id}`); }, 3000);
await fetch(`/captcha/${g_current_captcha_id}?remove`); }, 3000);
document.getElementsByName("captcha_answer")[0].value = "";
await getNewCaptcha();
});
// Remove unused CAPTCHA on a server.
window.addEventListener("unload", () => fetch(`/captcha/${g_current_captcha_id}`));
window.addEventListener("unload", () => fetch(`/captcha/${g_current_captcha_id}?remove`));
setInterval(async () => {
captcha_remain.innerText = --g_captcha_timeout_remain;

View File

@ -49,8 +49,8 @@ block content
h4 Human languages
p #[span.highlighted English] is my main foreign language and I think that I know it quite well, but every time I reread what I wrote here I'm constantly catching cringe vibes. xD I have a nice pronunciation (my teacher once said so :)) and tend to British non-rhotic variant. Of course I end up with a mix of all the flavours of different dialects. What I struggle from is a lack of speaking practice and vocabulary is also still a problem.
p #[span.highlighted Ukrainian (Українська)] is a special case. :) Russian and ukrainian are related languages, so mutually understandable, yet many russians are struggling to understand it, and I don't know why. But it is a matter of putting some little effort to negatiate it. I never learnt it, but throughout past 8 years I saw enough material to learn it to a decent level of understanding and some speaking.
p Агась, нiколи спецiйно не вчив українську, користував перекладач тiльки як словник, за цi вiсрокiв було досить матерiалiв. :) Слава Українi у складi Росiї! хД
p I like learning languages, but me being a lazy fuck won't let me learn something up to a reasonable level. I ended up with being able to +- read some languages, like german, polish, french, japanese (hiragana + some yet not forgotten kanji). So, now I main only english.
p Агась, нiколи спецiйно не вчив українську, користував перекладач тiльки як словник, за цi вiсрокiв було досить матерiалiв. :) P.S.: Слава Українi у складi Росiї! хД
p I like learning languages, but me being a lazy fuck won't let me learn something up to a reasonable level. I ended up with being able to +- read some languages, like norwegian, german, polish, french, japanese (hiragana + some yet not forgotten kanji). So, now I main only english.
h4 Computer languages
p #[span.highlighted For programming and scripting:] Python, Go, JavaScript, and Bash for now are most used by me. Later I used or tasted: Pascal, Delphi, C#, C, C++, Java, PHP.
p #[span.highlighted Markup and declarative:] SQL (SQLite3, MariaDB), HTML5, CSS3, LaTeX, Markdown, XML, and JSON.

View File

@ -43,9 +43,9 @@ block content
each line in post.message.split("\n")
+entryLine(line)
if post.feedback
.feedback
.reply
header
| Feedback by #[span.highlighted #{owner}] on #[time(datetime=post.feedback_created)= date_(post.feedback_created, tz)]
| Reply by #[span.highlighted #{owner}] on #[time(datetime=post.feedback_created)= date_(post.feedback_created, tz)]
each line in post.feedback.split("\n")
+entryLine(line)
else