Compare commits
9 Commits
d049261ab0
...
7bcc450b08
Author | SHA1 | Date |
---|---|---|
Alexander Andreev | 7bcc450b08 | |
Alexander Andreev | f82ad8bf63 | |
Alexander Andreev | 3891945371 | |
Alexander Andreev | 7c39ad7c3c | |
Alexander Andreev | 28120c8f3a | |
Alexander Andreev | e0a81990e7 | |
Alexander Andreev | 2796d517af | |
Alexander Andreev | 5ca275910e | |
Alexander Andreev | 78cbf71198 |
|
@ -7,14 +7,14 @@
|
||||||
|
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-size: 1.1rem;
|
font-size: 1.1rem;
|
||||||
font-variant: normal;
|
font-variant: normal;
|
||||||
text-align: left; }
|
text-align: left; }
|
||||||
|
|
||||||
h4,
|
h4,
|
||||||
h5 {
|
h5 {
|
||||||
text-indent: 1.5rem;
|
text-indent: 1.5rem;
|
||||||
margin: 1rem 0 1rem 0; }
|
margin: 1rem 0 1rem 0; }
|
||||||
|
|
||||||
:is(h3, h4, h5) a { color: var(--text-color); }
|
:is(h3, h4, h5) a { color: var(--text-color); }
|
||||||
|
|
||||||
|
@ -22,39 +22,39 @@ h5 {
|
||||||
|
|
||||||
code,
|
code,
|
||||||
pre {
|
pre {
|
||||||
font-family: 'Share Tech Mono';
|
font-family: 'Share Tech Mono';
|
||||||
font-size: 1.1rem;
|
font-size: 1.1rem;
|
||||||
letter-spacing: -1px; }
|
letter-spacing: -1px; }
|
||||||
|
|
||||||
pre {
|
pre {
|
||||||
border-left: 1px solid var(--primary-color);
|
border-left: 1px solid var(--primary-color);
|
||||||
padding-left: .25rem;
|
padding-left: .25rem;
|
||||||
margin-bottom: .5rem;
|
margin-bottom: .5rem;
|
||||||
margin-left: 1.6rem;
|
margin-left: 1.6rem;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
white-space: pre; }
|
white-space: pre; }
|
||||||
|
|
||||||
article {
|
article {
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
max-width: 100%; }
|
max-width: 100%; }
|
||||||
|
|
||||||
article:last-child { margin-bottom: 1rem; }
|
article:last-child { margin-bottom: 1rem; }
|
||||||
|
|
||||||
article header {
|
article header {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column; }
|
flex-direction: column; }
|
||||||
|
|
||||||
article header .menu {
|
article header .menu {
|
||||||
display: flex;
|
display: flex;
|
||||||
font-size: .8rem;
|
font-size: .8rem;
|
||||||
justify-content: space-between; }
|
justify-content: space-between; }
|
||||||
|
|
||||||
article header nav a { font-variant: normal; }
|
article header nav a { font-variant: normal; }
|
||||||
|
|
||||||
article header nav ol {
|
article header nav ol {
|
||||||
counter-reset: item;
|
counter-reset: item;
|
||||||
list-style-type: none; }
|
list-style-type: none; }
|
||||||
|
|
||||||
article header nav ol > li { counter-increment: item; }
|
article header nav ol > li { counter-increment: item; }
|
||||||
|
|
||||||
|
|
|
@ -1,82 +1,86 @@
|
||||||
::placeholder { color: var(--primary-color); }
|
::placeholder { color: var(--primary-color); }
|
||||||
|
|
||||||
button.refresh:disabled {
|
button.refresh:disabled {
|
||||||
color: gray;
|
color: gray;
|
||||||
cursor: progress; }
|
cursor: progress; }
|
||||||
|
|
||||||
#new-post {
|
form {
|
||||||
display: grid;
|
display: grid;
|
||||||
gap: .5rem;
|
gap: .5rem;
|
||||||
grid-template-areas:
|
grid-template-areas:
|
||||||
"n w w"
|
"n w w"
|
||||||
"m m m"
|
"m m m"
|
||||||
"c a s";
|
"c a s";
|
||||||
grid-template-columns: 1fr 1fr 1fr; }
|
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 {
|
textarea {
|
||||||
grid-area: m;
|
grid-area: m;
|
||||||
height: 5.5rem;
|
height: 5.5rem;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
min-width: 100%; }
|
min-width: 100%; }
|
||||||
|
|
||||||
#new-post input[type="submit"] {
|
input[type="text"],
|
||||||
background-color: var(--primary-color);
|
textarea {
|
||||||
border: none;
|
background-color: var(--background-color);
|
||||||
color: #f5f5f5;
|
border: none;
|
||||||
font: inherit;
|
border-bottom: 1px solid var(--primary-color);
|
||||||
grid-area: s;
|
color: var(--text-color);
|
||||||
height: 2rem; }
|
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"],
|
span.captcha {
|
||||||
#new-post textarea {
|
display: flex;
|
||||||
background-color: var(--background-color);
|
flex-basis: 100%;
|
||||||
border: none;
|
grid-area: a;
|
||||||
border-bottom: 1px solid var(--primary-color);
|
justify-content: space-evenly; align-items: center; column-gap: .5rem; }
|
||||||
color: var(--text-color);
|
|
||||||
font: inherit; }
|
|
||||||
|
|
||||||
#new-post span.captcha {
|
span.captcha img {
|
||||||
display: flex;
|
height: 40px;
|
||||||
flex-basis: 100%;
|
width: 160px; }
|
||||||
grid-area: a;
|
|
||||||
justify-content: space-evenly; align-items: center; column-gap: .5rem; }
|
|
||||||
|
|
||||||
#new-post span.captcha img {
|
span.captcha input[type="text"] { width: 4.5rem; text-align: center; height: 27px; }
|
||||||
height: 40px;
|
|
||||||
width: 160px; }
|
|
||||||
|
|
||||||
#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 > *,
|
article header { display: inline; font-size: .85rem; }
|
||||||
#posts article div.feedback > *,
|
|
||||||
#posts article div.feedback { margin-left: .5rem; }
|
|
||||||
|
|
||||||
#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; }
|
#pagination a:not(:first-child) { margin-left: .5rem; }
|
||||||
|
|
||||||
@media screen and (max-width: 641px) {
|
@media screen and (max-width: 641px) {
|
||||||
#new-post {
|
form {
|
||||||
gap: 1.5rem;
|
gap: 1.5rem;
|
||||||
grid-template-areas:
|
grid-template-areas:
|
||||||
"n"
|
"n"
|
||||||
"w"
|
"w"
|
||||||
"m"
|
"m"
|
||||||
"c"
|
"c"
|
||||||
"a"
|
"a"
|
||||||
"s";
|
"s";
|
||||||
grid-template-columns: 1fr; } }
|
grid-template-columns: 1fr; } }
|
|
@ -4,10 +4,13 @@ header { position: relative; }
|
||||||
|
|
||||||
#logo { width: 100%; }
|
#logo { width: 100%; }
|
||||||
|
|
||||||
|
nav,
|
||||||
|
#services {
|
||||||
|
text-align: center;
|
||||||
|
width: 100%; }
|
||||||
|
|
||||||
nav a:last-child { margin-left: .6rem; }
|
nav a:last-child { margin-left: .6rem; }
|
||||||
|
|
||||||
nav,
|
|
||||||
#services { text-align: center; width: 100%; }
|
|
||||||
|
|
||||||
#services :is(a, span) { margin: .3rem; }
|
#services :is(a, span) { margin: .3rem; }
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
|
button:not(:last-child) { padding-right: 1rem; }
|
||||||
|
|
||||||
article header a { color: var(--text-color); }
|
article header a { color: var(--text-color); }
|
||||||
|
|
||||||
article footer {
|
article footer {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
padding: 0; }
|
padding: 0; }
|
||||||
|
|
||||||
.hidden { display: none; }
|
.hidden { display: none; }
|
||||||
|
|
||||||
button:not(:last-child) { padding-right: 1rem; }
|
|
|
@ -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_captcha_timeout_remain = g_captcha_timeout_seconds;
|
||||||
let g_current_captcha_id = captcha_hidden_field.value;
|
let g_current_captcha_id = captcha_hidden_field.value;
|
||||||
|
|
||||||
|
function getColorScheme() {
|
||||||
|
return window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
|
||||||
|
}
|
||||||
|
|
||||||
async function getNewCaptcha() {
|
async function getNewCaptcha() {
|
||||||
const id = await fetch("/captcha/").then(r => r.text());
|
const id = await fetch("/captcha/").then(r => r.text());
|
||||||
g_current_captcha_id = id;
|
g_current_captcha_id = id;
|
||||||
captcha_hidden_field.value = 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;
|
g_captcha_timeout_remain = g_captcha_timeout_seconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,12 +33,13 @@ captcha_refresh.addEventListener("click", async e => {
|
||||||
captcha_refresh.disabled = true;
|
captcha_refresh.disabled = true;
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
captcha_refresh.disabled = false;
|
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();
|
await getNewCaptcha();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Remove unused CAPTCHA on a server.
|
// 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 () => {
|
setInterval(async () => {
|
||||||
captcha_remain.innerText = --g_captcha_timeout_remain;
|
captcha_remain.innerText = --g_captcha_timeout_remain;
|
||||||
|
|
|
@ -49,8 +49,8 @@ block content
|
||||||
h4 Human languages
|
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 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 #[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 Росiї! хД
|
p Агась, нiколи спец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 german, polish, french, japanese (hiragana + some yet not forgotten kanji). So, now I main only english.
|
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
|
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 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.
|
p #[span.highlighted Markup and declarative:] SQL (SQLite3, MariaDB), HTML5, CSS3, LaTeX, Markdown, XML, and JSON.
|
||||||
|
|
|
@ -43,9 +43,9 @@ block content
|
||||||
each line in post.message.split("\n")
|
each line in post.message.split("\n")
|
||||||
+entryLine(line)
|
+entryLine(line)
|
||||||
if post.feedback
|
if post.feedback
|
||||||
.feedback
|
.reply
|
||||||
header
|
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")
|
each line in post.feedback.split("\n")
|
||||||
+entryLine(line)
|
+entryLine(line)
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue