First commit
This commit is contained in:
commit
85bfdd233e
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.env
|
||||
**/__pycache__/
|
||||
.idea/
|
11
Pipfile
Normal file
11
Pipfile
Normal file
@ -0,0 +1,11 @@
|
||||
[[source]]
|
||||
url = "https://pypi.org/simple"
|
||||
verify_ssl = true
|
||||
name = "pypi"
|
||||
|
||||
[packages]
|
||||
|
||||
[dev-packages]
|
||||
|
||||
[requires]
|
||||
python_version = "3.9"
|
20
Pipfile.lock
generated
Normal file
20
Pipfile.lock
generated
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "a36a5392bb1e8bbc06bfaa0761e52593cf2d83b486696bf54667ba8da616c839"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
"python_version": "3.9"
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"name": "pypi",
|
||||
"url": "https://pypi.org/simple",
|
||||
"verify_ssl": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": {},
|
||||
"develop": {}
|
||||
}
|
43
app/__init__.py
Normal file
43
app/__init__.py
Normal file
@ -0,0 +1,43 @@
|
||||
from dotenv import load_dotenv
|
||||
from flask import Flask, url_for, render_template
|
||||
import os
|
||||
import json
|
||||
from app.config import PANDOC_LINK, PANDOC_PATH
|
||||
import subprocess
|
||||
|
||||
load_dotenv()
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
@app.context_processor
|
||||
def override_url_for():
|
||||
return dict(url_for=dated_url_for)
|
||||
|
||||
|
||||
#TODO: make instead of datetime hash of commit
|
||||
|
||||
|
||||
def dated_url_for(endpoint, **values):
|
||||
if endpoint == 'static':
|
||||
filename = values.get('filename', None)
|
||||
if filename:
|
||||
file_path = os.path.join(app.root_path, endpoint, filename)
|
||||
values['q'] = int(os.stat(file_path).st_mtime)
|
||||
return url_for(endpoint, **values)
|
||||
|
||||
|
||||
@app.route(f'/{PANDOC_LINK}/<page>')
|
||||
def get_pandoc_page(page):
|
||||
with open(f'{PANDOC_PATH}/{page}/config.json') as f:
|
||||
data = json.loads(f.read())
|
||||
filename = f'{PANDOC_PATH}/{page}/main.md'
|
||||
inserted = subprocess.Popen(f'pandoc {filename} -t html --mathjax', shell=True, stdout=subprocess.PIPE).stdout.read().decode('utf-8')
|
||||
template = data['template']
|
||||
return render_template(template, markdown=inserted)
|
||||
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
return render_template('index.html')
|
||||
|
2
app/config.py
Normal file
2
app/config.py
Normal file
@ -0,0 +1,2 @@
|
||||
PANDOC_LINK = 'page'
|
||||
PANDOC_PATH = '/home/thematdev/pandoc_pages'
|
547
app/static/css/pandoc.css
Normal file
547
app/static/css/pandoc.css
Normal file
@ -0,0 +1,547 @@
|
||||
/*
|
||||
* Forked from https://gist.github.com/killercup/5917178
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: 'CMU';
|
||||
src: url('/static/fonts/cmu.woff2');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Lora';
|
||||
src: url('/static/fonts/lora.ttf');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inconsolata';
|
||||
src: url('/static/fonts/inconsolata.woff2');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Garamond';
|
||||
src: url('/static/fonts/garamond.woff2');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Open Sans";
|
||||
src: url('/static/fonts/opensans.woff2');
|
||||
}
|
||||
|
||||
html {
|
||||
font-size: 100%;
|
||||
overflow-y: scroll;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
a {
|
||||
white-space: pre; /* for some weird reason this affects pre blocks */
|
||||
}
|
||||
|
||||
body {
|
||||
/* color: #444; */
|
||||
font-family: "Times New Roman", Times, "Tinos", serif;
|
||||
font-size: 16px;
|
||||
line-height: 1.7;
|
||||
padding: 8px;
|
||||
margin: auto;
|
||||
width: 750px;
|
||||
background: #fefefe;
|
||||
text-align: justify;
|
||||
padding-bottom: 25px;
|
||||
}
|
||||
|
||||
.credits {
|
||||
font-size: 14px;
|
||||
margin: 25px 10px -40px 15px;
|
||||
padding: 16px 50px 0 50px;
|
||||
/* text-align: left; */
|
||||
border-top: 1px solid #666;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.credits table {
|
||||
border: none;
|
||||
margin-left: 46px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.credits table td{
|
||||
border: none;
|
||||
padding: 0;
|
||||
padding-left: 1.5em;
|
||||
}
|
||||
|
||||
#header {
|
||||
height: 55px;
|
||||
margin-top: -8px;
|
||||
margin-bottom: 20px;
|
||||
border-bottom: 1px solid #666;
|
||||
}
|
||||
|
||||
#links {
|
||||
display: inline-block;
|
||||
text-align: right;
|
||||
font-size: 16px;
|
||||
float: right;
|
||||
margin-top: 17px;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
||||
#links a {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
#header a:hover {
|
||||
color: #0645ad!important;
|
||||
}
|
||||
|
||||
#header a {
|
||||
color: #111 !important;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#logo {
|
||||
margin-top: 10px;
|
||||
font-size: 22px;
|
||||
height: 0;
|
||||
font-family: 'Garamond', serif;
|
||||
}
|
||||
|
||||
.contents {
|
||||
position: inline-block;
|
||||
float: left;
|
||||
position: relative;
|
||||
left: 12px;
|
||||
width: 285px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.contents ul {
|
||||
padding-left: 22px;
|
||||
margin-top: 10px;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.contents li {
|
||||
font-size: 8px;
|
||||
color: lightgrey;
|
||||
font-family: 'Open Sans', sans;
|
||||
height: 30px;
|
||||
line-height: 8px;
|
||||
list-style-type: none;
|
||||
white-space: pre-line;
|
||||
}
|
||||
|
||||
.contents li:hover {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.contents li:first-letter {
|
||||
font-size: 13px;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.contents a {
|
||||
font-family: "Times New Roman", Times, "Tinos", serif;
|
||||
font-size: 16px;
|
||||
line-height: 1em;
|
||||
display: inline-block;
|
||||
width: 252px;
|
||||
}
|
||||
|
||||
.contents a:first-letter {
|
||||
font-size: 16px; /* the only way to fix */
|
||||
}
|
||||
|
||||
.contents a:after {
|
||||
content: "\A";
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
.contents li:before {
|
||||
content: '•';
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
left: 11px;
|
||||
margin-top: 5px;
|
||||
color: black !important;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0645ad;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #0b0080;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #06e;
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: #faa700;
|
||||
}
|
||||
|
||||
a:focus {
|
||||
outline: thin dotted;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.title {
|
||||
display: none;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
margin-bottom: 0.8em !important;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: 'Garamond', serif;
|
||||
color: #111;
|
||||
line-height: 125%;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0em;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
h2, h3 {
|
||||
padding-bottom: 5px;
|
||||
border-bottom: 1px solid #eaecef;
|
||||
}
|
||||
|
||||
.contents h2, .contents h3 {
|
||||
padding-bottom: 0;
|
||||
border-bottom: none;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
h4, h5, h6 {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2.5em;
|
||||
margin-top: 0.8em;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
color: #666666;
|
||||
margin: 0;
|
||||
padding-left: 1em;
|
||||
border-left: 0.5em #EEE solid;
|
||||
}
|
||||
|
||||
hr {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 0px;
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
pre, code, kbd, samp {
|
||||
color: #000;
|
||||
font-family: 'Inconsolata', monospace;
|
||||
}
|
||||
|
||||
pre {
|
||||
white-space: pre;
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
b, strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
ins {
|
||||
background: #ff9;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
sub, sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
margin: 1em 0;
|
||||
padding: 0 0 0 2em;
|
||||
}
|
||||
|
||||
li p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
li ul {
|
||||
padding-left: 18px;
|
||||
padding-top: 1px;
|
||||
}
|
||||
|
||||
ul ul, ol ol {
|
||||
margin: .3em 0;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
margin-bottom: .8em;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin: 0 0 .8em 2em;
|
||||
}
|
||||
|
||||
dd:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
-ms-interpolation-mode: bicubic;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
figure {
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
img {
|
||||
border: none;
|
||||
margin: auto;
|
||||
display: block;
|
||||
max-width: 85%;
|
||||
max-height: 320px;
|
||||
}
|
||||
|
||||
figcaption {
|
||||
font-size: 0.8em;
|
||||
font-style: italic;
|
||||
margin: 0 0 .8em;
|
||||
}
|
||||
|
||||
table {
|
||||
margin-bottom: 2em;
|
||||
border-bottom: 1px solid #ddd;
|
||||
border-right: 1px solid #ddd;
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table th {
|
||||
padding: .2em 1em;
|
||||
background-color: #eee;
|
||||
border-top: 1px solid #ddd;
|
||||
border-left: 1px solid #ddd;
|
||||
}
|
||||
|
||||
table td {
|
||||
padding: .2em 1em;
|
||||
border-top: 1px solid #ddd;
|
||||
border-left: 1px solid #ddd;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.author {
|
||||
display: block;
|
||||
width: 100%;
|
||||
text-align: right;
|
||||
margin-top: -30px;
|
||||
margin-bottom: 40px;
|
||||
padding-right: 20px;
|
||||
/* position: absolute; */
|
||||
color: #444;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
code:not([class]) {
|
||||
border: 1px solid #ddd !important;
|
||||
background-color: #f8f8f8 !important;
|
||||
border-radius: 3px !important;
|
||||
padding-left: 2px !important;
|
||||
padding-right: 2px !important;
|
||||
font-size: 0.85em;
|
||||
}
|
||||
|
||||
pre {
|
||||
border: 1px solid #ddd !important;
|
||||
background-color: #f8f8f8 !important;
|
||||
border-radius: 3px !important;
|
||||
padding: 2px !important;
|
||||
padding-left: 8px !important;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
font-size: 12pt;
|
||||
width: 190mm;
|
||||
margin: 0;
|
||||
/*margin-left 10mm;*/
|
||||
}
|
||||
|
||||
@page { margin: 15mm; }
|
||||
|
||||
#header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
pre, ul, ol {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
h1::after, h2::after, h3::after {
|
||||
/* page-break-after: avoid; */
|
||||
content: "";
|
||||
display: block;
|
||||
height: 100px;
|
||||
margin-bottom: -100px;
|
||||
}
|
||||
|
||||
/*
|
||||
h1::before, h2::before, h3::before {
|
||||
content: "";
|
||||
display: block;
|
||||
height: 100px;
|
||||
margin-top: 100px;
|
||||
}
|
||||
*/
|
||||
|
||||
a, a:visited {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/*
|
||||
abbr[title]:after {
|
||||
content: " (" attr(title) ")";
|
||||
}
|
||||
*/
|
||||
|
||||
p, h2, h3 {
|
||||
orphans: 3;
|
||||
widows: 3;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
a[href^='http://sereja.me']:before {
|
||||
content: url('http://sereja.me/favicon.ico');
|
||||
margin-right: 4px;
|
||||
}
|
||||
*/
|
||||
|
||||
a[href^='http://e-maxx.ru']:before {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
top: 4px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url('http://e-maxx.ru/favicon.ico') no-repeat;
|
||||
background-size: 18px;
|
||||
}
|
||||
|
||||
/*
|
||||
a[href^='https://algorithmica.org']:before {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
top: 4px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: url('https://algorithmica.org/favicon.ico') no-repeat;
|
||||
background-size: 18px;
|
||||
}
|
||||
*/
|
||||
|
||||
/* https://habrahabr.ru/favicon.ico */
|
||||
|
||||
a[href^='https://neerc.ifmo.ru']:before {
|
||||
content: url('https://neerc.ifmo.ru/favicon.ico');
|
||||
margin-right: 4px;
|
||||
position: relative;
|
||||
top: 4px;
|
||||
}
|
||||
|
||||
a[href^='https://www.youtube.com']:before {
|
||||
content: url('https://www.youtube.com/favicon.ico');
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
a[href^='https://codeforces.com']:before {
|
||||
content: url('http://codeforces.com/favicon.ico');
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
a[href^='https://www.topcoder.com/']:before {
|
||||
content: url('https://s3.amazonaws.com/app.topcoder.com/favicon.ico');
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
a[href=''] {
|
||||
color: black;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
|
153
app/static/css/prism.css
Normal file
153
app/static/css/prism.css
Normal file
@ -0,0 +1,153 @@
|
||||
/* PrismJS 1.24.1
|
||||
https://prismjs.com/download.html#themes=prism-solarizedlight&languages=markup+css+clike+javascript+c+cpp */
|
||||
/*
|
||||
Solarized Color Schemes originally by Ethan Schoonover
|
||||
http://ethanschoonover.com/solarized
|
||||
|
||||
Ported for PrismJS by Hector Matos
|
||||
Website: https://krakendev.io
|
||||
Twitter Handle: https://twitter.com/allonsykraken)
|
||||
*/
|
||||
|
||||
/*
|
||||
SOLARIZED HEX
|
||||
--------- -------
|
||||
base03 #002b36
|
||||
base02 #073642
|
||||
base01 #586e75
|
||||
base00 #657b83
|
||||
base0 #839496
|
||||
base1 #93a1a1
|
||||
base2 #eee8d5
|
||||
base3 #fdf6e3
|
||||
yellow #b58900
|
||||
orange #cb4b16
|
||||
red #dc322f
|
||||
magenta #d33682
|
||||
violet #6c71c4
|
||||
blue #268bd2
|
||||
cyan #2aa198
|
||||
green #859900
|
||||
*/
|
||||
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
color: #657b83; /* base00 */
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
font-size: 1em;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
|
||||
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
|
||||
background: #073642; /* base02 */
|
||||
}
|
||||
|
||||
pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
|
||||
code[class*="language-"]::selection, code[class*="language-"] ::selection {
|
||||
background: #073642; /* base02 */
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
pre[class*="language-"] {
|
||||
padding: 1em;
|
||||
margin: .5em 0;
|
||||
overflow: auto;
|
||||
border-radius: 0.3em;
|
||||
}
|
||||
|
||||
:not(pre) > code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
background-color: #fdf6e3; /* base3 */
|
||||
}
|
||||
|
||||
/* Inline code */
|
||||
:not(pre) > code[class*="language-"] {
|
||||
padding: .1em;
|
||||
border-radius: .3em;
|
||||
}
|
||||
|
||||
.token.comment,
|
||||
.token.prolog,
|
||||
.token.doctype,
|
||||
.token.cdata {
|
||||
color: #93a1a1; /* base1 */
|
||||
}
|
||||
|
||||
.token.punctuation {
|
||||
color: #586e75; /* base01 */
|
||||
}
|
||||
|
||||
.token.namespace {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.token.property,
|
||||
.token.tag,
|
||||
.token.boolean,
|
||||
.token.number,
|
||||
.token.constant,
|
||||
.token.symbol,
|
||||
.token.deleted {
|
||||
color: #268bd2; /* blue */
|
||||
}
|
||||
|
||||
.token.selector,
|
||||
.token.attr-name,
|
||||
.token.string,
|
||||
.token.char,
|
||||
.token.builtin,
|
||||
.token.url,
|
||||
.token.inserted {
|
||||
color: #2aa198; /* cyan */
|
||||
}
|
||||
|
||||
.token.entity {
|
||||
color: #657b83; /* base00 */
|
||||
background: #eee8d5; /* base2 */
|
||||
}
|
||||
|
||||
.token.atrule,
|
||||
.token.attr-value,
|
||||
.token.keyword {
|
||||
color: #859900; /* green */
|
||||
}
|
||||
|
||||
.token.function,
|
||||
.token.class-name {
|
||||
color: #b58900; /* yellow */
|
||||
}
|
||||
|
||||
.token.regex,
|
||||
.token.important,
|
||||
.token.variable {
|
||||
color: #cb4b16; /* orange */
|
||||
}
|
||||
|
||||
.token.important,
|
||||
.token.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
.token.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.token.entity {
|
||||
cursor: help;
|
||||
}
|
||||
|
BIN
app/static/fonts/cmu.woff2
Normal file
BIN
app/static/fonts/cmu.woff2
Normal file
Binary file not shown.
BIN
app/static/fonts/garamond.woff2
Normal file
BIN
app/static/fonts/garamond.woff2
Normal file
Binary file not shown.
BIN
app/static/fonts/inconsolata.woff2
Normal file
BIN
app/static/fonts/inconsolata.woff2
Normal file
Binary file not shown.
BIN
app/static/fonts/opensans.woff2
Normal file
BIN
app/static/fonts/opensans.woff2
Normal file
Binary file not shown.
9
app/static/js/prism.js
Normal file
9
app/static/js/prism.js
Normal file
File diff suppressed because one or more lines are too long
22
app/templates/basic_template.html
Normal file
22
app/templates/basic_template.html
Normal file
@ -0,0 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/pandoc.css') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/prism.css') }}">
|
||||
|
||||
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
|
||||
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{{markdown|safe}}
|
||||
<script>
|
||||
var divs = document.getElementsByTagName("code");
|
||||
for (var i = 0; i < divs.length; i++) {
|
||||
divs[i].classList.add("language-cpp");
|
||||
}
|
||||
</script>
|
||||
<script src="{{ url_for('static', filename='js/prism.js') }}"></script>
|
||||
</body>
|
||||
</html>
|
1
app/templates/index.html
Normal file
1
app/templates/index.html
Normal file
@ -0,0 +1 @@
|
||||
Wiki index page
|
Reference in New Issue
Block a user