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 {
|
||||
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; }
|
||||
|
||||
|
|
|
@ -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; } }
|
|
@ -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; }
|
||||
|
||||
|
|
|
@ -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; }
|
|
@ -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;
|
||||
|
|
|
@ -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 Рос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ал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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue