This commit is contained in:
gd
2021-03-23 23:11:57 +03:00
commit 73f23a591c
18 changed files with 912 additions and 0 deletions

82
static/css/codehilite.css Normal file
View File

@ -0,0 +1,82 @@
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.hll { background-color: #404040 }
.c { color: #999999; font-style: italic } /* Comment */
.err { color: #a61717; background-color: #e3d2d2 } /* Error */
.esc { color: #d0d0d0 } /* Escape */
.g { color: #d0d0d0 } /* Generic */
.k { color: #6ab825; font-weight: bold } /* Keyword */
.l { color: #d0d0d0 } /* Literal */
.n { color: #d0d0d0 } /* Name */
.o { color: #d0d0d0 } /* Operator */
.x { color: #d0d0d0 } /* Other */
.p { color: #d0d0d0 } /* Punctuation */
.ch { color: #999999; font-style: italic } /* Comment.Hashbang */
.cm { color: #999999; font-style: italic } /* Comment.Multiline */
.cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
.cpf { color: #999999; font-style: italic } /* Comment.PreprocFile */
.c1 { color: #999999; font-style: italic } /* Comment.Single */
.cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
.gd { color: #d22323 } /* Generic.Deleted */
.ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
.gr { color: #d22323 } /* Generic.Error */
.gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
.gi { color: #589819 } /* Generic.Inserted */
.go { color: #cccccc } /* Generic.Output */
.gp { color: #aaaaaa } /* Generic.Prompt */
.gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
.gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
.gt { color: #d22323 } /* Generic.Traceback */
.kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */
.kd { color: #6ab825; font-weight: bold } /* Keyword.Declaration */
.kn { color: #6ab825; font-weight: bold } /* Keyword.Namespace */
.kp { color: #6ab825 } /* Keyword.Pseudo */
.kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */
.kt { color: #6ab825; font-weight: bold } /* Keyword.Type */
.ld { color: #d0d0d0 } /* Literal.Date */
.m { color: #3677a9 } /* Literal.Number */
.s { color: #ed9d13 } /* Literal.String */
.na { color: #bbbbbb } /* Name.Attribute */
.nb { color: #24909d } /* Name.Builtin */
.nc { color: #447fcf; text-decoration: underline } /* Name.Class */
.no { color: #40ffff } /* Name.Constant */
.nd { color: #ffa500 } /* Name.Decorator */
.ni { color: #d0d0d0 } /* Name.Entity */
.ne { color: #bbbbbb } /* Name.Exception */
.nf { color: #447fcf } /* Name.Function */
.nl { color: #d0d0d0 } /* Name.Label */
.nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */
.nx { color: #d0d0d0 } /* Name.Other */
.py { color: #d0d0d0 } /* Name.Property */
.nt { color: #6ab825; font-weight: bold } /* Name.Tag */
.nv { color: #40ffff } /* Name.Variable */
.ow { color: #6ab825; font-weight: bold } /* Operator.Word */
.w { color: #666666 } /* Text.Whitespace */
.mb { color: #3677a9 } /* Literal.Number.Bin */
.mf { color: #3677a9 } /* Literal.Number.Float */
.mh { color: #3677a9 } /* Literal.Number.Hex */
.mi { color: #3677a9 } /* Literal.Number.Integer */
.mo { color: #3677a9 } /* Literal.Number.Oct */
.sa { color: #ed9d13 } /* Literal.String.Affix */
.sb { color: #ed9d13 } /* Literal.String.Backtick */
.sc { color: #ed9d13 } /* Literal.String.Char */
.dl { color: #ed9d13 } /* Literal.String.Delimiter */
.sd { color: #ed9d13 } /* Literal.String.Doc */
.s2 { color: #ed9d13 } /* Literal.String.Double */
.se { color: #ed9d13 } /* Literal.String.Escape */
.sh { color: #ed9d13 } /* Literal.String.Heredoc */
.si { color: #ed9d13 } /* Literal.String.Interpol */
.sx { color: #ffa500 } /* Literal.String.Other */
.sr { color: #ed9d13 } /* Literal.String.Regex */
.s1 { color: #ed9d13 } /* Literal.String.Single */
.ss { color: #ed9d13 } /* Literal.String.Symbol */
.bp { color: #24909d } /* Name.Builtin.Pseudo */
.fm { color: #447fcf } /* Name.Function.Magic */
.vc { color: #40ffff } /* Name.Variable.Class */
.vg { color: #40ffff } /* Name.Variable.Global */
.vi { color: #40ffff } /* Name.Variable.Instance */
.vm { color: #40ffff } /* Name.Variable.Magic */
.il { color: #3677a9 } /* Literal.Number.Integer.Long */

310
static/css/style.css Normal file
View File

@ -0,0 +1,310 @@
body {
font-family: 'Ubuntu', sans-serif;
font-size: 19px;
}
h1,
h2,
h3,
h4 { margin: 1rem 0; }
.header-link {
position: absolute;
margin-left: .2em;
opacity: 0;
}
h1:hover .header-link,
h2:hover .header-link,
h3:hover .header-link,
h4:hover .header-link {
opacity: 100;
}
.sidebar h1 .header-link,
.sidebar h2 .header-link,
.sidebar h3 .header-link,
.sidebar h4 .header-link {
display: none;
}
a { color: #212529; }
a:hover { color: #707275; }
blockquote {
border-left: 4px solid #212529;
margin: 1rem 0;
padding: 0.2rem 1rem;
color: #212529;
}
blockquote p { margin: 0; }
/* Details and summary */
details, summary {
display: block;
margin: 1rem 0;
transition: 200ms linear;
}
summary {
cursor: pointer;
transition: .3s;
}
/* Hide defaul marker */
details > summary { list-style: none; }
details summary::-webkit-details-marker { display: none; }
details[open] summary ~ * {
animation: open 0.3s ease-in-out;
}
@keyframes open {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
details summary:before {
content: '+';
font-family: 'Ubuntu Mono';
font-size: 20px;
display: inline-flex;
padding: 0 0.3rem;
}
details[open] summary:before {
content: '-';
font-family: 'Ubuntu Mono';
font-size: 20px;
display: inline-flex;
padding: 0 0.3rem;
}
/* Code styling */
code,
pre {
font-family: 'Ubuntu Mono', monospace;
font-size: 19px;
color: #d0d0d0;
}
pre code { background: unset; padding: unset; }
pre {
background: #1c1d21;
border-radius: 6px;
padding: 1rem;
}
code {
color: #1c1d21;
background: #ffeff0;
padding: 4px;
border-radius: 6px;
}
.raw-pre {
color: unset;
background: unset;
}
/* Large headings */
.large-h { font-size: 42px; }
.title-h { font-size: 72px; line-height: 1.1; }
/* Blank spaces */
.blank-1 { display: block; height: 1rem; }
.blank-2 { display: block; height: 2rem; }
.blank-5 { display: block; height: 5rem; }
/* Sign in form */
.form-signin {
position: absolute;
left: 50%;
top: 45%;
transform: translate(-50%,-50%);
min-width: 360px;
}
#inputPassword { margin-bottom: 8px; }
/* Sign out button */
.signout-btn {
z-index: 1001;
position: fixed;
top: 16px;
right: 1rem;
height: 46px;
width: 46px;
text-align: center;
border-radius: 3px;
cursor: pointer;
}
.signout-btn i {
font-size: 30px;
line-height: 46px;
}
.signout-btn a { color: #212529; }
/* 404 page */
.page_not_found {
position: absolute;
left: 50%;
top: 45%;
transform: translate(-50%,-50%);
text-align: center;
}
/* Header bar */
.header {
display: block;
position: fixed;
height: 5rem;
background: unset;
}
/* Sidebar */
.sidebar-toggle-btn {
z-index: 1001;
position: fixed;
top: 1rem;
left: 316px;
height: 46px;
width: 46px;
text-align: center;
border-radius: 3px;
cursor: pointer;
transition: left 0.4s ease;
}
.sidebar-toggle-btn.click { left: 1rem; }
.sidebar-toggle-btn i {
font-size: 26px;
line-height: 46px;
}
.sidebar {
z-index: 1000;
position: fixed;
width: 300px;
height: 100%;
left: 0px;
padding: 1rem;
overflow: auto;
transition: left 0.4s ease;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
background: #ffffff;
}
.sidebar.hide { left: -300px; }
/* Side menu */
.sidebar a {
display: block;
width: auto;
padding: 2px 0;
text-decoration: none;
transition: 0.2s linear;
color: #212529;
}
.sidebar a:hover { text-decoration: underline; }
.sidebar ul,
.sidebar ol,
.sidebar li {
list-style-type: none;
list-style-position: inside;
position: relative;
padding: 3px 0 3px 10px;
margin: 0;
color: #6c757d;
}
.mark {
display: inline;
left: -10px;
bottom: 1px;
width: 100%;
padding: 4px;
border-radius: 6px;
position: absolute;
color: #ffffff;
background: unset;
}
.mark:hover { color: #212529; }
.mark::before { content: '•'; }
/* Content container toggle */
.content {
margin-left: 300px;
transition: margin-left 0.5s;
}
.content.wide { margin-left: 0px; }
/* Back to top button */
.to-top-btn {
z-index: 1001;
display: none;
position: fixed;
height: 100%;
width: 3rem;
top: 5rem;
left: 315px;
cursor: pointer;
text-align: center;
transition: left 0.4s ease;
}
.to-top-btn i {
font-size: 26px;
line-height: 46px;
}
.to-top-btn.wide { left: 15px; }
.to-top-btn.show { display: block; }
/* Content block */
article {
display: block;
margin: auto;
padding: 1rem;
max-width: 840px;
}
article.wide { max-width: 980px; }
/* Responsivity */
@media (max-width: 1200px) {
.header { background: #ffffff; }
.sidebar { left: -300px; }
.sidebar-toggle-btn { left: 1rem; }
.content { margin-left: 0px; }
.sidebar.hide { left: 0px; }
.sidebar-toggle-btn.click { left: 316px; }
.to-top-btn.show { display: none; }
article.wide { max-width: 840px; }
}

BIN
static/images/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

63
static/js/script.js Normal file
View File

@ -0,0 +1,63 @@
// Here vanilla JavaScript is mixed with JQuery (3.6.0 slim).
// This is very bad. But works. TODO: delete jQuery.
// Toggle sidebar and change elements width.
$('.sidebar-toggle-btn').click(function(){
$(this).toggleClass("click");
$('.sidebar').toggleClass("hide");
$('#to-top-btn').toggleClass("wide");
$('article').toggleClass("wide");
if (screen.width > 1200 ) {
$('.content').toggleClass("wide");
}
});
// Add styling for tables.
$('table').toggleClass("table table-bordered")
// Back to top button.
var btn = $('#to-top-btn');
$(window).scroll(function() {
if ($(window).scrollTop() > 300) {
btn.addClass('show');
} else {
btn.removeClass('show');
}
});
btn.on('click', function(e) {
e.preventDefault();
window.scrollTo({ top: 0, behavior: "smooth"});
});
// Add marker to sidebar links.
$('.sidebar a').append('<div class="mark"></div>');
// Highlight current page link in sidebar -
// toggle marker on current page link.
var pathname = window.location.pathname;
var links = document.getElementsByTagName("a");
for (var element of links) {
var ref = element.getAttribute('href');
if (ref.substr(-1) !== "/") {
ref = ref + '/';
}
if (ref == pathname) {
$(element).children('.mark').css('color', '#212529');
}
}
// Add paragraph button aside of headings
$(function() {
return $("h1, h2, h3, h4").each(function(i, el) {
var $el, icon, id;
$el = $(el);
id = $el.attr('id');
icon = '<i class="bi bi-paragraph"></i>';
if (id) {
return $el.append($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
}
});
});