mkdocs 2.0.dev2__py3-none-any.whl → 2.0.dev4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mkdocs/__init__.py +3 -3
- mkdocs/__version__.py +1 -1
- mkdocs/extensions/relative_urls.py +2 -2
- mkdocs/mkdocs.py +103 -32
- mkdocs/theme/base.html +112 -7
- mkdocs-2.0.dev4.dist-info/METADATA +72 -0
- mkdocs-2.0.dev4.dist-info/RECORD +12 -0
- mkdocs/default/base.html +0 -17
- mkdocs/default/favicon.html +0 -1
- mkdocs/default/highlight.css +0 -86
- mkdocs/default/style.css +0 -148
- mkdocs-2.0.dev2.dist-info/METADATA +0 -20
- mkdocs-2.0.dev2.dist-info/RECORD +0 -16
- {mkdocs-2.0.dev2.dist-info → mkdocs-2.0.dev4.dist-info}/WHEEL +0 -0
- {mkdocs-2.0.dev2.dist-info → mkdocs-2.0.dev4.dist-info}/entry_points.txt +0 -0
mkdocs/__init__.py
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
from .__version__ import __title__, __version__
|
|
2
|
-
from .mkdocs import get_current_page,
|
|
2
|
+
from .mkdocs import get_current_page, get_site, Page, Static, Site, MkDocs, cli
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
__all__ = [
|
|
6
6
|
'__title__',
|
|
7
7
|
'__version__',
|
|
8
8
|
'get_current_page',
|
|
9
|
-
'
|
|
9
|
+
'get_site',
|
|
10
10
|
'Page',
|
|
11
11
|
'Static',
|
|
12
|
-
'
|
|
12
|
+
'Site',
|
|
13
13
|
'MkDocs',
|
|
14
14
|
'cli',
|
|
15
15
|
]
|
mkdocs/__version__.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
__title__ = "mkdocs"
|
|
2
|
-
__version__ = "2.0.
|
|
2
|
+
__version__ = "2.0.dev4"
|
|
@@ -8,7 +8,7 @@ import httpx
|
|
|
8
8
|
class URLProcessor(markdown.treeprocessors.Treeprocessor):
|
|
9
9
|
def run(self, root):
|
|
10
10
|
page = mkdocs.get_current_page()
|
|
11
|
-
|
|
11
|
+
site = mkdocs.get_site()
|
|
12
12
|
key = ''
|
|
13
13
|
link = ''
|
|
14
14
|
|
|
@@ -34,7 +34,7 @@ class URLProcessor(markdown.treeprocessors.Treeprocessor):
|
|
|
34
34
|
path_from = page.path
|
|
35
35
|
path_to = os.path.normpath(path_from.parent.joinpath(url.path))
|
|
36
36
|
|
|
37
|
-
target =
|
|
37
|
+
target = site.lookup_by_path(path_to)
|
|
38
38
|
if target is None:
|
|
39
39
|
continue # Broken link!
|
|
40
40
|
|
mkdocs/mkdocs.py
CHANGED
|
@@ -20,7 +20,7 @@ RESET = '\033[0m'
|
|
|
20
20
|
# The build context is used to ensure the current page and the site index
|
|
21
21
|
# are available to the RelativeURLs markdown extension.
|
|
22
22
|
_current_page = contextvars.ContextVar('current_page')
|
|
23
|
-
|
|
23
|
+
_site = contextvars.ContextVar('site')
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def get_current_page():
|
|
@@ -30,8 +30,8 @@ def get_current_page():
|
|
|
30
30
|
return ctx
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
def
|
|
34
|
-
ctx =
|
|
33
|
+
def get_site():
|
|
34
|
+
ctx = _site.get()
|
|
35
35
|
if ctx is None:
|
|
36
36
|
raise RuntimeError("No current context")
|
|
37
37
|
return ctx
|
|
@@ -52,14 +52,6 @@ class Page:
|
|
|
52
52
|
self.url = str(url).removesuffix('index.html')
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
class PageAsHTML:
|
|
56
|
-
def __init__(self, page, title, html):
|
|
57
|
-
self.path = page.path
|
|
58
|
-
self.url = page.url
|
|
59
|
-
self.title = title
|
|
60
|
-
self.html = html
|
|
61
|
-
|
|
62
|
-
|
|
63
55
|
class Static:
|
|
64
56
|
def __init__(self, path):
|
|
65
57
|
self.path = path
|
|
@@ -67,18 +59,24 @@ class Static:
|
|
|
67
59
|
self.url = str(url).removesuffix('index.html')
|
|
68
60
|
|
|
69
61
|
|
|
70
|
-
class
|
|
62
|
+
class Site:
|
|
71
63
|
def __init__(self, pages, statics):
|
|
72
64
|
self._pages = pages
|
|
73
65
|
self._statics = statics
|
|
74
66
|
|
|
75
|
-
self.
|
|
67
|
+
self._paths = {
|
|
76
68
|
str(resource.path): resource for resource in pages + statics
|
|
77
69
|
}
|
|
78
|
-
self.
|
|
70
|
+
self._urls = {
|
|
79
71
|
str(resource.url): resource for resource in pages + statics
|
|
80
72
|
}
|
|
81
73
|
|
|
74
|
+
def lookup_by_path(self, path) -> Page | Static | None:
|
|
75
|
+
return self._paths.get(path)
|
|
76
|
+
|
|
77
|
+
def lookup_by_url(self, url) -> Page | Static | None:
|
|
78
|
+
return self._urls.get(url)
|
|
79
|
+
|
|
82
80
|
@property
|
|
83
81
|
def pages(self) -> list[Page]:
|
|
84
82
|
return list(self._pages)
|
|
@@ -91,9 +89,55 @@ class SiteIndex:
|
|
|
91
89
|
return len(self.pages) + len(self.statics)
|
|
92
90
|
|
|
93
91
|
|
|
92
|
+
class TableOfContents:
|
|
93
|
+
def __init__(self, md):
|
|
94
|
+
self.html = md.toc
|
|
95
|
+
self.title = md.toc_tokens[0]['name'] if md.toc_tokens else ''
|
|
96
|
+
self._items = list(md.toc_tokens)
|
|
97
|
+
|
|
98
|
+
def __bool__(self):
|
|
99
|
+
return bool(self._items)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class NavItem:
|
|
103
|
+
def __init__(self, title: str, page: Page):
|
|
104
|
+
self.title = title
|
|
105
|
+
self.page = page
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class Navigation:
|
|
109
|
+
def __init__(self, nav_items):
|
|
110
|
+
self._items = nav_items
|
|
111
|
+
|
|
112
|
+
def __iter__(self):
|
|
113
|
+
return iter(self._items)
|
|
114
|
+
|
|
115
|
+
@property
|
|
116
|
+
def html(self):
|
|
117
|
+
page = get_current_page()
|
|
118
|
+
t = jinja2.Template("""<ul>{% for item in nav %}<li><a href="{{ item.page.url }}" {% if item.page == page %}class="active"{% endif %}>{{ item.title }}</a></li>{% endfor %}</ul>""")
|
|
119
|
+
return t.render({"nav": self, "page": page})
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class PageContext:
|
|
123
|
+
def __init__(self, page, text, html, toc):
|
|
124
|
+
self.path = page.path
|
|
125
|
+
self.url = page.url
|
|
126
|
+
self.text = text
|
|
127
|
+
self.html = html
|
|
128
|
+
self.toc = toc
|
|
129
|
+
|
|
130
|
+
# Leaving this here for compatability with... `{{ page.title }}`
|
|
131
|
+
# TODO.... probably deprecate, but follow through with toc design discussion.
|
|
132
|
+
@property
|
|
133
|
+
def title(self):
|
|
134
|
+
return self.toc.title
|
|
135
|
+
|
|
136
|
+
|
|
94
137
|
class MkDocs:
|
|
95
138
|
def __init__(self, input_dir):
|
|
96
|
-
self.
|
|
139
|
+
self.site = self.load_site(input_dir)
|
|
140
|
+
self.nav = self.load_nav({}, self.site)
|
|
97
141
|
self.env = self.init_env(input_dir)
|
|
98
142
|
self.md = self.init_md()
|
|
99
143
|
self.base = self.env.get_template('base.html')
|
|
@@ -121,7 +165,30 @@ class MkDocs:
|
|
|
121
165
|
|
|
122
166
|
pages = sorted(pages, key=lambda x: x.url)
|
|
123
167
|
statics = sorted(statics, key=lambda x: x.url)
|
|
124
|
-
return
|
|
168
|
+
return Site(pages, statics)
|
|
169
|
+
|
|
170
|
+
def load_nav(self, config, site):
|
|
171
|
+
if not config:
|
|
172
|
+
config = {"nav": [
|
|
173
|
+
{"title": page.path.stem, "path": str(page.path)}
|
|
174
|
+
for page in site.pages
|
|
175
|
+
]}
|
|
176
|
+
|
|
177
|
+
nav_config = config.get('nav', [])
|
|
178
|
+
nav_config = nav_config if isinstance(nav_config, list) else []
|
|
179
|
+
nav_items = []
|
|
180
|
+
for item in nav_config:
|
|
181
|
+
if not isinstance(item, dict):
|
|
182
|
+
continue
|
|
183
|
+
path = item.get('path', '')
|
|
184
|
+
title = item.get('title', '')
|
|
185
|
+
if not path:
|
|
186
|
+
continue
|
|
187
|
+
if path:
|
|
188
|
+
page = site.lookup_by_path(path)
|
|
189
|
+
nav_item = NavItem(title, page)
|
|
190
|
+
nav_items.append(nav_item)
|
|
191
|
+
return Navigation(nav_items)
|
|
125
192
|
|
|
126
193
|
def init_env(self, input_dir) -> jinja2.Environment:
|
|
127
194
|
@jinja2.pass_context
|
|
@@ -154,26 +221,28 @@ class MkDocs:
|
|
|
154
221
|
],
|
|
155
222
|
extension_configs={
|
|
156
223
|
'footnotes': {'BACKLINK_TITLE': ''},
|
|
157
|
-
'toc': {'anchorlink': True, 'marker': ''}
|
|
224
|
+
'toc': {'anchorlink': True, 'marker': '', 'toc_class': ''}
|
|
158
225
|
}
|
|
159
226
|
)
|
|
160
227
|
|
|
161
228
|
@contextlib.contextmanager
|
|
162
229
|
def set_context(self, current_page):
|
|
163
230
|
token_page = _current_page.set(current_page)
|
|
164
|
-
token_site =
|
|
231
|
+
token_site = _site.set(self.site)
|
|
165
232
|
try:
|
|
166
233
|
yield
|
|
167
234
|
finally:
|
|
168
235
|
_current_page.reset(token_page)
|
|
169
|
-
|
|
236
|
+
_site.reset(token_site)
|
|
237
|
+
|
|
238
|
+
# Commands...
|
|
170
239
|
|
|
171
240
|
def build(self, input, output):
|
|
172
241
|
input_dir = pathlib.Path(input)
|
|
173
242
|
output_dir = pathlib.Path(output)
|
|
174
243
|
|
|
175
|
-
print(DARK_GRAY + "Collected %d resources" % len(self.
|
|
176
|
-
for page in self.
|
|
244
|
+
print(DARK_GRAY + "Collected %d resources" % len(self.site) + RESET)
|
|
245
|
+
for page in self.site.pages:
|
|
177
246
|
print(GREEN + " + " + RESET + BOLD + str(page.path) + RESET + DARK_GRAY + " [markdown]" + RESET)
|
|
178
247
|
input_path = input_dir.joinpath(page.path)
|
|
179
248
|
output_path = output_dir.joinpath(page.build_path)
|
|
@@ -181,14 +250,14 @@ class MkDocs:
|
|
|
181
250
|
with self.set_context(page):
|
|
182
251
|
text = input_path.read_text()
|
|
183
252
|
html = self.md.reset().convert(text)
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
output = self.base.render(page=
|
|
253
|
+
toc = TableOfContents(self.md)
|
|
254
|
+
page_ctx = PageContext(page=page, text=text, html=html, toc=toc)
|
|
255
|
+
output = self.base.render(page=page_ctx, nav=self.nav)
|
|
187
256
|
|
|
188
257
|
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
189
258
|
output_path.write_text(output)
|
|
190
259
|
|
|
191
|
-
for static in self.
|
|
260
|
+
for static in self.site.statics:
|
|
192
261
|
print(GREEN + " + " + RESET + BOLD + str(static.path) + RESET + DARK_GRAY + " [static]" + RESET)
|
|
193
262
|
input_path = input_dir.joinpath(static.path)
|
|
194
263
|
output_path = output_dir.joinpath(static.path)
|
|
@@ -199,24 +268,24 @@ class MkDocs:
|
|
|
199
268
|
def serve(self, input):
|
|
200
269
|
input_dir = pathlib.Path(input)
|
|
201
270
|
|
|
202
|
-
print(DARK_GRAY + "Serving %d resources" % len(self.
|
|
203
|
-
for page in self.
|
|
271
|
+
print(DARK_GRAY + "Serving %d resources" % len(self.site) + RESET)
|
|
272
|
+
for page in self.site.pages:
|
|
204
273
|
print(GREEN + " + " + RESET + BOLD + str(page.url) + RESET + DARK_GRAY + " [markdown]" + RESET)
|
|
205
|
-
for static in self.
|
|
274
|
+
for static in self.site.statics:
|
|
206
275
|
print(GREEN + " + " + RESET + BOLD + str(static.url) + RESET + DARK_GRAY + " [static]" + RESET)
|
|
207
276
|
print()
|
|
208
277
|
|
|
209
278
|
def app(request):
|
|
210
|
-
resource = self.
|
|
279
|
+
resource = self.site.lookup_by_url(request.url.path)
|
|
211
280
|
|
|
212
281
|
if isinstance(resource, Page):
|
|
213
282
|
input_path = input_dir.joinpath(resource.path)
|
|
214
283
|
with self.set_context(resource):
|
|
215
284
|
text = input_path.read_text()
|
|
216
285
|
html = self.md.reset().convert(text)
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
output = self.base.render(page=
|
|
286
|
+
toc = TableOfContents(self.md)
|
|
287
|
+
page_ctx = PageContext(page=resource, text=text, html=html, toc=toc)
|
|
288
|
+
output = self.base.render(page=page_ctx, nav=self.nav)
|
|
220
289
|
return httpx.Response(200, content=httpx.HTML(output))
|
|
221
290
|
elif isinstance(resource, Static):
|
|
222
291
|
input_path = input_dir.joinpath(resource.path)
|
|
@@ -227,6 +296,8 @@ class MkDocs:
|
|
|
227
296
|
server.serve()
|
|
228
297
|
|
|
229
298
|
|
|
299
|
+
# Command line client...
|
|
300
|
+
|
|
230
301
|
@click.group()
|
|
231
302
|
def cli():
|
|
232
303
|
if pathlib.Path('mkdocs.yml').exists():
|
mkdocs/theme/base.html
CHANGED
|
@@ -35,24 +35,40 @@
|
|
|
35
35
|
/* Layout... */
|
|
36
36
|
|
|
37
37
|
main {
|
|
38
|
-
margin
|
|
38
|
+
margin: 0 auto;
|
|
39
|
+
max-width: 700px;
|
|
39
40
|
width: 60%;
|
|
40
|
-
padding: 1rem;
|
|
41
|
+
padding: 1rem 0;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
@media (max-width: 1000px) {
|
|
44
45
|
main {
|
|
45
|
-
|
|
46
|
+
margin-left: 20%;
|
|
46
47
|
width: 75%;
|
|
47
|
-
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
nav.toc {
|
|
51
|
+
display: none;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
nav.site {
|
|
55
|
+
width: 25%;
|
|
48
56
|
}
|
|
49
57
|
}
|
|
50
58
|
|
|
51
|
-
@media (max-width:
|
|
59
|
+
@media (max-width: 750px) {
|
|
52
60
|
main {
|
|
53
|
-
padding: 1.5rem 1rem;
|
|
54
|
-
width: 100%;
|
|
55
61
|
margin-left: 0;
|
|
62
|
+
width: 100%;
|
|
63
|
+
padding: 1rem 1.5rem;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
nav.toc {
|
|
67
|
+
display: none;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
nav.site {
|
|
71
|
+
display: none;
|
|
56
72
|
}
|
|
57
73
|
}
|
|
58
74
|
|
|
@@ -163,9 +179,98 @@ a.toclink:hover::after {
|
|
|
163
179
|
margin: 0 0.8rem;
|
|
164
180
|
color: var(--neutral-color);
|
|
165
181
|
}
|
|
182
|
+
|
|
183
|
+
/* Table of contents styling */
|
|
184
|
+
|
|
185
|
+
nav.site {
|
|
186
|
+
position: fixed;
|
|
187
|
+
width : 20%;
|
|
188
|
+
padding: 2rem;
|
|
189
|
+
height: 100%;
|
|
190
|
+
overflow-y: scroll;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
nav.toc {
|
|
194
|
+
position: fixed;
|
|
195
|
+
margin-left: 80%;
|
|
196
|
+
width : 20%;
|
|
197
|
+
padding: 2rem;
|
|
198
|
+
height: 100%;
|
|
199
|
+
overflow-y: scroll;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* Navigation styling */
|
|
203
|
+
|
|
204
|
+
nav.site ul {
|
|
205
|
+
padding: 0;
|
|
206
|
+
margin: 0;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
nav.site li {
|
|
210
|
+
padding: 0;
|
|
211
|
+
margin: 0.5rem 0;
|
|
212
|
+
display: block;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
nav.site li a.active {
|
|
216
|
+
color: var(--link-color);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
nav.site li a:hover {
|
|
220
|
+
color: var(--link-color);
|
|
221
|
+
text-decoration: none;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
nav.site li a {
|
|
225
|
+
color: var(--muted-fg-color);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
nav.site li a:hover {
|
|
229
|
+
color: var(--fg-color);
|
|
230
|
+
text-decoration: none;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
nav.toc ul {
|
|
234
|
+
padding: 0;
|
|
235
|
+
margin: 0;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
nav.toc li {
|
|
239
|
+
padding: 0;
|
|
240
|
+
margin: 0.5rem 0;
|
|
241
|
+
display: block;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
nav.toc li a.active {
|
|
245
|
+
color: var(--link-color);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
nav.toc li a:hover {
|
|
249
|
+
color: var(--link-color);
|
|
250
|
+
text-decoration: none;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
nav.toc li a {
|
|
254
|
+
color: var(--muted-fg-color);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
nav.toc li a:hover {
|
|
258
|
+
color: var(--fg-color);
|
|
259
|
+
text-decoration: none;
|
|
260
|
+
}
|
|
166
261
|
</style>
|
|
167
262
|
</head>
|
|
168
263
|
<body>
|
|
264
|
+
{% if nav %}
|
|
265
|
+
<nav class="site">
|
|
266
|
+
{{ nav.html }}
|
|
267
|
+
</nav>
|
|
268
|
+
{% endif %}
|
|
269
|
+
{% if page.toc %}
|
|
270
|
+
<nav class="toc">
|
|
271
|
+
{{ page.toc.html }}
|
|
272
|
+
</nav>
|
|
273
|
+
{% endif %}
|
|
169
274
|
<main>
|
|
170
275
|
{{ page.html }}
|
|
171
276
|
</main>
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: mkdocs
|
|
3
|
+
Version: 2.0.dev4
|
|
4
|
+
Summary: HTTP, for Python.
|
|
5
|
+
Author-email: Kim Christie <noreply@lovelydinosaur.com>
|
|
6
|
+
Classifier: Development Status :: 4 - Beta
|
|
7
|
+
Classifier: Environment :: Web Environment
|
|
8
|
+
Classifier: Intended Audience :: Developers
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
16
|
+
Requires-Python: >=3.10
|
|
17
|
+
Requires-Dist: click
|
|
18
|
+
Requires-Dist: httpx>=1.0.dev6
|
|
19
|
+
Requires-Dist: jinja2
|
|
20
|
+
Requires-Dist: markdown
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# MkDocs
|
|
24
|
+
|
|
25
|
+
MkDocs is a smart, simple, website design tool.
|
|
26
|
+
|
|
27
|
+
Getting started is easy...
|
|
28
|
+
|
|
29
|
+
```shell
|
|
30
|
+
$ pip install mkdocs --pre
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
*This will install the version 2.0 pre-release.*
|
|
34
|
+
|
|
35
|
+
## Getting started
|
|
36
|
+
|
|
37
|
+
1. Create a `docs/README.md` page.
|
|
38
|
+
2. Run `mkdocs serve` to view your documentation in a browser.
|
|
39
|
+
3. Run `mkdocs build` to build a static website ready to host.
|
|
40
|
+
|
|
41
|
+
## Writing your docs
|
|
42
|
+
|
|
43
|
+
1. Create additional markdown pages.
|
|
44
|
+
2. Use relative interlinking between pages.
|
|
45
|
+
3. Include images and use relative interlinking from pages.
|
|
46
|
+
|
|
47
|
+
*MkDocs supports [GitHub Flavored Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) for page authoring.*
|
|
48
|
+
|
|
49
|
+
## Styling your docs
|
|
50
|
+
|
|
51
|
+
1. Create a `templates/base.html` to customise the styling.
|
|
52
|
+
2. Include css and javascript to serve static files.
|
|
53
|
+
|
|
54
|
+
*MkDocs uses [Jinja templating](https://jinja.palletsprojects.com/en/stable/templates/) for HTML rendering.*
|
|
55
|
+
|
|
56
|
+
A starting point can be as simple as...
|
|
57
|
+
|
|
58
|
+
```html
|
|
59
|
+
<html>
|
|
60
|
+
<head>
|
|
61
|
+
<meta charset="utf-8">
|
|
62
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
63
|
+
<title>{{ page.toc.title }}</title>
|
|
64
|
+
<link rel="stylesheet" href="{{ '/css/default.css' | url }}">
|
|
65
|
+
</head>
|
|
66
|
+
<body>
|
|
67
|
+
<main>
|
|
68
|
+
{{ page.html }}
|
|
69
|
+
</main>
|
|
70
|
+
</body>
|
|
71
|
+
</html>
|
|
72
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
mkdocs/__init__.py,sha256=NwNA-Nxju0I4e1-Msqo_ewJLRcjJjEMiVs2bbfzoMCg,283
|
|
2
|
+
mkdocs/__version__.py,sha256=H32qhExLRVyUqFMfnUmHAtd8VRrtgzXcA5Xgp9BLsUA,46
|
|
3
|
+
mkdocs/mkdocs.py,sha256=xCa3TEcWJM4igJk7J2yo0clYTenwulMTyPpcZlr9bQY,10242
|
|
4
|
+
mkdocs/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
mkdocs/extensions/relative_urls.py,sha256=iVwmxDeXVAP6MvdJkkdhPT3KZY-QskD8fOQAVX1R3e4,1954
|
|
6
|
+
mkdocs/extensions/short_codes.py,sha256=I2SwGMcG9OT_vpkJwPI8cHBTkwQAjSPZmoQKfctsHn4,950
|
|
7
|
+
mkdocs/extensions/strike_thru.py,sha256=GrCbfMrHz_2Vlh3E572EQYOSDzEGym34pkHElzF2HZY,577
|
|
8
|
+
mkdocs/theme/base.html,sha256=tWLme7GnwgJmWFLvkHCHmUYyDobxVqEBgtge47hClXY,4269
|
|
9
|
+
mkdocs-2.0.dev4.dist-info/METADATA,sha256=ZkPn54kDu5kJVRpJlisgu7O0D7kkWp9bwhmMk70vVI4,2151
|
|
10
|
+
mkdocs-2.0.dev4.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
11
|
+
mkdocs-2.0.dev4.dist-info/entry_points.txt,sha256=5PqBrzYJLZ9-yQ0djvENWOQ-0x6Xj30JYNSzM_m70ZU,38
|
|
12
|
+
mkdocs-2.0.dev4.dist-info/RECORD,,
|
mkdocs/default/base.html
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<html>
|
|
2
|
-
<head>
|
|
3
|
-
<meta charset="utf-8">
|
|
4
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
5
|
-
<title>...</title>
|
|
6
|
-
{% with favicon='📘' %}{% include 'favicon.html' %}{% endwith %}
|
|
7
|
-
<style>
|
|
8
|
-
{% include 'style.css' %}
|
|
9
|
-
{% include 'highlight.css' %}
|
|
10
|
-
</style>
|
|
11
|
-
</head>
|
|
12
|
-
<body>
|
|
13
|
-
<main>
|
|
14
|
-
{{ html }}
|
|
15
|
-
</main>
|
|
16
|
-
</body>
|
|
17
|
-
</html>
|
mkdocs/default/favicon.html
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<link rel="icon" href="data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><text y=".9em" font-size="90">{{ favicon }}</text></svg>">
|
mkdocs/default/highlight.css
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
pre { line-height: 125%; }
|
|
2
|
-
td.linenos .normal { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
|
|
3
|
-
span.linenos { color: #6e7681; background-color: #0d1117; padding-left: 5px; padding-right: 5px; }
|
|
4
|
-
td.linenos .special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
|
|
5
|
-
span.linenos.special { color: #e6edf3; background-color: #6e7681; padding-left: 5px; padding-right: 5px; }
|
|
6
|
-
.codehilite .hll { background-color: #6e7681 }
|
|
7
|
-
.codehilite { background: #0d1117; color: #E6EDF3 }
|
|
8
|
-
.codehilite .c { color: #8B949E; font-style: italic } /* Comment */
|
|
9
|
-
.codehilite .err { color: #F85149 } /* Error */
|
|
10
|
-
.codehilite .esc { color: #E6EDF3 } /* Escape */
|
|
11
|
-
.codehilite .g { color: #E6EDF3 } /* Generic */
|
|
12
|
-
.codehilite .k { color: #FF7B72 } /* Keyword */
|
|
13
|
-
.codehilite .l { color: #A5D6FF } /* Literal */
|
|
14
|
-
.codehilite .n { color: #E6EDF3 } /* Name */
|
|
15
|
-
.codehilite .o { color: #FF7B72; font-weight: bold } /* Operator */
|
|
16
|
-
.codehilite .x { color: #E6EDF3 } /* Other */
|
|
17
|
-
.codehilite .p { color: #E6EDF3 } /* Punctuation */
|
|
18
|
-
.codehilite .ch { color: #8B949E; font-style: italic } /* Comment.Hashbang */
|
|
19
|
-
.codehilite .cm { color: #8B949E; font-style: italic } /* Comment.Multiline */
|
|
20
|
-
.codehilite .cp { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Preproc */
|
|
21
|
-
.codehilite .cpf { color: #8B949E; font-style: italic } /* Comment.PreprocFile */
|
|
22
|
-
.codehilite .c1 { color: #8B949E; font-style: italic } /* Comment.Single */
|
|
23
|
-
.codehilite .cs { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Special */
|
|
24
|
-
.codehilite .gd { color: #FFA198; background-color: #490202 } /* Generic.Deleted */
|
|
25
|
-
.codehilite .ge { color: #E6EDF3; font-style: italic } /* Generic.Emph */
|
|
26
|
-
.codehilite .ges { color: #E6EDF3; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
|
|
27
|
-
.codehilite .gr { color: #FFA198 } /* Generic.Error */
|
|
28
|
-
.codehilite .gh { color: #79C0FF; font-weight: bold } /* Generic.Heading */
|
|
29
|
-
.codehilite .gi { color: #56D364; background-color: #0F5323 } /* Generic.Inserted */
|
|
30
|
-
.codehilite .go { color: #8B949E } /* Generic.Output */
|
|
31
|
-
.codehilite .gp { color: #8B949E } /* Generic.Prompt */
|
|
32
|
-
.codehilite .gs { color: #E6EDF3; font-weight: bold } /* Generic.Strong */
|
|
33
|
-
.codehilite .gu { color: #79C0FF } /* Generic.Subheading */
|
|
34
|
-
.codehilite .gt { color: #FF7B72 } /* Generic.Traceback */
|
|
35
|
-
.codehilite .g-Underline { color: #E6EDF3; text-decoration: underline } /* Generic.Underline */
|
|
36
|
-
.codehilite .kc { color: #79C0FF } /* Keyword.Constant */
|
|
37
|
-
.codehilite .kd { color: #FF7B72 } /* Keyword.Declaration */
|
|
38
|
-
.codehilite .kn { color: #FF7B72 } /* Keyword.Namespace */
|
|
39
|
-
.codehilite .kp { color: #79C0FF } /* Keyword.Pseudo */
|
|
40
|
-
.codehilite .kr { color: #FF7B72 } /* Keyword.Reserved */
|
|
41
|
-
.codehilite .kt { color: #FF7B72 } /* Keyword.Type */
|
|
42
|
-
.codehilite .ld { color: #79C0FF } /* Literal.Date */
|
|
43
|
-
.codehilite .m { color: #A5D6FF } /* Literal.Number */
|
|
44
|
-
.codehilite .s { color: #A5D6FF } /* Literal.String */
|
|
45
|
-
.codehilite .na { color: #E6EDF3 } /* Name.Attribute */
|
|
46
|
-
.codehilite .nb { color: #E6EDF3 } /* Name.Builtin */
|
|
47
|
-
.codehilite .nc { color: #F0883E; font-weight: bold } /* Name.Class */
|
|
48
|
-
.codehilite .no { color: #79C0FF; font-weight: bold } /* Name.Constant */
|
|
49
|
-
.codehilite .nd { color: #D2A8FF; font-weight: bold } /* Name.Decorator */
|
|
50
|
-
.codehilite .ni { color: #FFA657 } /* Name.Entity */
|
|
51
|
-
.codehilite .ne { color: #F0883E; font-weight: bold } /* Name.Exception */
|
|
52
|
-
.codehilite .nf { color: #D2A8FF; font-weight: bold } /* Name.Function */
|
|
53
|
-
.codehilite .nl { color: #79C0FF; font-weight: bold } /* Name.Label */
|
|
54
|
-
.codehilite .nn { color: #FF7B72 } /* Name.Namespace */
|
|
55
|
-
.codehilite .nx { color: #E6EDF3 } /* Name.Other */
|
|
56
|
-
.codehilite .py { color: #79C0FF } /* Name.Property */
|
|
57
|
-
.codehilite .nt { color: #7EE787 } /* Name.Tag */
|
|
58
|
-
.codehilite .nv { color: #79C0FF } /* Name.Variable */
|
|
59
|
-
.codehilite .ow { color: #FF7B72; font-weight: bold } /* Operator.Word */
|
|
60
|
-
.codehilite .pm { color: #E6EDF3 } /* Punctuation.Marker */
|
|
61
|
-
.codehilite .w { color: #6E7681 } /* Text.Whitespace */
|
|
62
|
-
.codehilite .mb { color: #A5D6FF } /* Literal.Number.Bin */
|
|
63
|
-
.codehilite .mf { color: #A5D6FF } /* Literal.Number.Float */
|
|
64
|
-
.codehilite .mh { color: #A5D6FF } /* Literal.Number.Hex */
|
|
65
|
-
.codehilite .mi { color: #A5D6FF } /* Literal.Number.Integer */
|
|
66
|
-
.codehilite .mo { color: #A5D6FF } /* Literal.Number.Oct */
|
|
67
|
-
.codehilite .sa { color: #79C0FF } /* Literal.String.Affix */
|
|
68
|
-
.codehilite .sb { color: #A5D6FF } /* Literal.String.Backtick */
|
|
69
|
-
.codehilite .sc { color: #A5D6FF } /* Literal.String.Char */
|
|
70
|
-
.codehilite .dl { color: #79C0FF } /* Literal.String.Delimiter */
|
|
71
|
-
.codehilite .sd { color: #A5D6FF } /* Literal.String.Doc */
|
|
72
|
-
.codehilite .s2 { color: #A5D6FF } /* Literal.String.Double */
|
|
73
|
-
.codehilite .se { color: #79C0FF } /* Literal.String.Escape */
|
|
74
|
-
.codehilite .sh { color: #79C0FF } /* Literal.String.Heredoc */
|
|
75
|
-
.codehilite .si { color: #A5D6FF } /* Literal.String.Interpol */
|
|
76
|
-
.codehilite .sx { color: #A5D6FF } /* Literal.String.Other */
|
|
77
|
-
.codehilite .sr { color: #79C0FF } /* Literal.String.Regex */
|
|
78
|
-
.codehilite .s1 { color: #A5D6FF } /* Literal.String.Single */
|
|
79
|
-
.codehilite .ss { color: #A5D6FF } /* Literal.String.Symbol */
|
|
80
|
-
.codehilite .bp { color: #E6EDF3 } /* Name.Builtin.Pseudo */
|
|
81
|
-
.codehilite .fm { color: #D2A8FF; font-weight: bold } /* Name.Function.Magic */
|
|
82
|
-
.codehilite .vc { color: #79C0FF } /* Name.Variable.Class */
|
|
83
|
-
.codehilite .vg { color: #79C0FF } /* Name.Variable.Global */
|
|
84
|
-
.codehilite .vi { color: #79C0FF } /* Name.Variable.Instance */
|
|
85
|
-
.codehilite .vm { color: #79C0FF } /* Name.Variable.Magic */
|
|
86
|
-
.codehilite .il { color: #A5D6FF } /* Literal.Number.Integer.Long */
|
mkdocs/default/style.css
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
/* Color scheme */
|
|
2
|
-
|
|
3
|
-
:root {
|
|
4
|
-
--fg-color: #f0f6fc;
|
|
5
|
-
--muted-fg-color: #9198a1;
|
|
6
|
-
--neutral-color: #3d444d;
|
|
7
|
-
--bg-color: #151b23;
|
|
8
|
-
|
|
9
|
-
--link-color: #4493f8;
|
|
10
|
-
--code-bg-color: #0d1117;
|
|
11
|
-
|
|
12
|
-
--accent-note: #0969da;
|
|
13
|
-
--accent-tip: #1a7f37;
|
|
14
|
-
--accent-important:#8250df;
|
|
15
|
-
--accent-warning: #9a6700;
|
|
16
|
-
--accent-caution: #d1242f;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/* Basic reset */
|
|
20
|
-
|
|
21
|
-
* {
|
|
22
|
-
margin: 0;
|
|
23
|
-
padding: 0;
|
|
24
|
-
box-sizing: border-box;
|
|
25
|
-
font-weight: 300;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/* Layout... */
|
|
29
|
-
|
|
30
|
-
main {
|
|
31
|
-
margin-left: 20%;
|
|
32
|
-
width: 60%;
|
|
33
|
-
padding: 1rem;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
@media (max-width: 1000px) {
|
|
37
|
-
main {
|
|
38
|
-
padding: 1.5rem 1rem;
|
|
39
|
-
width: 75%;
|
|
40
|
-
margin-left: 25%;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
@media (max-width: 800px) {
|
|
45
|
-
main {
|
|
46
|
-
padding: 1.5rem 1rem;
|
|
47
|
-
width: 100%;
|
|
48
|
-
margin-left: 0;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/* Typography & spacing */
|
|
53
|
-
|
|
54
|
-
html {
|
|
55
|
-
scroll-behavior: smooth;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
body {
|
|
59
|
-
line-height: 1.6;
|
|
60
|
-
color: var(--fg-color);
|
|
61
|
-
background-color: var(--bg-color);
|
|
62
|
-
font-family: Helvetica, sans-serif;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
h1, h2, h3, h4, h5 {
|
|
66
|
-
margin-top: 1.5rem;
|
|
67
|
-
margin-bottom: 1.5rem;
|
|
68
|
-
line-height: 1.3;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
h1 {
|
|
72
|
-
border-bottom: 1px solid var(--neutral-color);
|
|
73
|
-
}
|
|
74
|
-
h2 {
|
|
75
|
-
border-bottom: 1px solid var(--neutral-color);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
p {
|
|
79
|
-
margin: 1rem 0;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
strong {
|
|
83
|
-
font-weight: 600;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
ul, ol {
|
|
87
|
-
padding-left: 2rem;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
li {
|
|
91
|
-
margin: 0.5rem 0;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
hr {
|
|
95
|
-
margin-top: 1rem;
|
|
96
|
-
margin-bottom: 1rem;
|
|
97
|
-
border: none;
|
|
98
|
-
border-top: 4px solid;
|
|
99
|
-
color: var(--neutral-color);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
blockquote {
|
|
103
|
-
border-left: 0.25rem solid var(--neutral-color);
|
|
104
|
-
padding: 0 1rem;
|
|
105
|
-
color: var(--muted-fg-color);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
pre {
|
|
109
|
-
padding: 1rem;
|
|
110
|
-
overflow-x: scroll;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
img {
|
|
114
|
-
max-width: 100%
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
a {
|
|
118
|
-
color: var(--link-color);
|
|
119
|
-
text-decoration: none;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
a:hover {
|
|
123
|
-
text-decoration: underline;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/* Tables */
|
|
127
|
-
|
|
128
|
-
table {
|
|
129
|
-
border-collapse: collapse;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
th, td {
|
|
133
|
-
padding: 6px 13px;
|
|
134
|
-
border: 1px solid var(--neutral-color);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/* Header anchor links */
|
|
138
|
-
|
|
139
|
-
a.toclink {
|
|
140
|
-
color: inherit;
|
|
141
|
-
text-decoration: none;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
a.toclink:hover::after {
|
|
145
|
-
content: "#";
|
|
146
|
-
margin: 0 0.8rem;
|
|
147
|
-
color: var(--neutral-color);
|
|
148
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.5
|
|
2
|
-
Name: mkdocs
|
|
3
|
-
Version: 2.0.dev2
|
|
4
|
-
Summary: HTTP, for Python.
|
|
5
|
-
Author-email: Kim Christie <noreply@lovelydinosaur.com>
|
|
6
|
-
Classifier: Development Status :: 4 - Beta
|
|
7
|
-
Classifier: Environment :: Web Environment
|
|
8
|
-
Classifier: Intended Audience :: Developers
|
|
9
|
-
Classifier: Operating System :: OS Independent
|
|
10
|
-
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
-
Classifier: Topic :: Internet :: WWW/HTTP
|
|
16
|
-
Requires-Python: >=3.10
|
|
17
|
-
Requires-Dist: click
|
|
18
|
-
Requires-Dist: httpx>=1.0.dev5
|
|
19
|
-
Requires-Dist: jinja2
|
|
20
|
-
Requires-Dist: markdown
|
mkdocs-2.0.dev2.dist-info/RECORD
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
mkdocs/__init__.py,sha256=bpMsoVf4vXq24u68lQIJ4ZObI95LoIPRSOUq-NBw1_c,305
|
|
2
|
-
mkdocs/__version__.py,sha256=EqRxpiV6Ug87HD5Jo_az1A4j2AMDx6hbktEUBq5_1dM,46
|
|
3
|
-
mkdocs/mkdocs.py,sha256=c4MSgt6diWYLVzvfredr4hbLUCObeGbPXZ_B8bkEQKk,8256
|
|
4
|
-
mkdocs/default/base.html,sha256=lrJDGMMkQq-iWkdjPwRDUWp-sBGZMMtqyvustu1dx9A,440
|
|
5
|
-
mkdocs/default/favicon.html,sha256=6-o5g6-nIJRTp83ZzABUaaV0_JNcm-1HxdTKeLbLsxg,227
|
|
6
|
-
mkdocs/default/highlight.css,sha256=2N7xpE1RkMFjJSnFOjQX3x0Mj6yKf6pM8-B08rE2n-o,5600
|
|
7
|
-
mkdocs/default/style.css,sha256=97Ja4pF93L-13enfKF2vyzfRIULkyH15VMeX85FC9Pc,2107
|
|
8
|
-
mkdocs/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
-
mkdocs/extensions/relative_urls.py,sha256=LbcM00LtwlMjAoflVuPklbe_KJyDroOcNVO1SuksnvE,1968
|
|
10
|
-
mkdocs/extensions/short_codes.py,sha256=I2SwGMcG9OT_vpkJwPI8cHBTkwQAjSPZmoQKfctsHn4,950
|
|
11
|
-
mkdocs/extensions/strike_thru.py,sha256=GrCbfMrHz_2Vlh3E572EQYOSDzEGym34pkHElzF2HZY,577
|
|
12
|
-
mkdocs/theme/base.html,sha256=IMq7rrAb97Hg3lKAxPtCufuwe3zNfRlWBGjvvT6kzSc,2785
|
|
13
|
-
mkdocs-2.0.dev2.dist-info/METADATA,sha256=Bez3eQjRzfDD_tdUZggcw8fxArFF36zCRezU9ppAQug,729
|
|
14
|
-
mkdocs-2.0.dev2.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
15
|
-
mkdocs-2.0.dev2.dist-info/entry_points.txt,sha256=5PqBrzYJLZ9-yQ0djvENWOQ-0x6Xj30JYNSzM_m70ZU,38
|
|
16
|
-
mkdocs-2.0.dev2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|