clean up
This commit is contained in:
parent
6861fa637c
commit
f4757dcd4d
15
freezer.py
15
freezer.py
|
@ -1,11 +1,12 @@
|
|||
from flask_frozen import Freezer
|
||||
from start_site import app, list_files
|
||||
from start_site import app
|
||||
from husk_helpers import list_files, cut_filetype_tree
|
||||
|
||||
#app.config["FREEZER_BASE_URL"] = "http://localhost/"
|
||||
#app.config["FREEZER_RELATIVE_URLS"] = False
|
||||
# app.config["FREEZER_BASE_URL"] = "http://localhost/"
|
||||
# app.config["FREEZER_RELATIVE_URLS"] = False
|
||||
|
||||
_path = app.config["husk"]["content"]["path"]
|
||||
freezer = Freezer(app)
|
||||
freezer = Freezer(app)
|
||||
|
||||
_files = list_files(_path)
|
||||
_files = [file[len(_path):-len(".md")] for file in _files]
|
||||
|
@ -13,12 +14,14 @@ _files = [file[len(_path):-len(".md")] for file in _files]
|
|||
for file in _files:
|
||||
print(f"[+] included {file}")
|
||||
|
||||
|
||||
@freezer.register_generator
|
||||
def content():
|
||||
for _file in _files:
|
||||
yield { "path": _file.encode('utf-8')}
|
||||
yield {"path": _file.encode('utf-8')}
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
freezer.freeze()
|
||||
print("[*] Great Success!")
|
||||
#freezer.run(debug=True)
|
||||
# freezer.run(debug=True)
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
import glob
|
||||
import os
|
||||
from collections import deque
|
||||
#import toml
|
||||
# from collections import deque
|
||||
# import toml
|
||||
|
||||
#base_url = toml.load('settings.toml')["general"]["base_url"]
|
||||
# base_url = toml.load('settings.toml')["general"]["base_url"]
|
||||
|
||||
# def sort_branch( lst ):
|
||||
# '''
|
||||
# put directories in front of files and
|
||||
# sorts both alphabetically
|
||||
# '''
|
||||
# '''
|
||||
# files = []
|
||||
# dirs = []
|
||||
# for path in lst:
|
||||
|
@ -18,7 +19,7 @@ from collections import deque
|
|||
# dirs.append(path)
|
||||
# files.sort()
|
||||
# dirs.sort()
|
||||
# return [*dirs, *files]
|
||||
# return [*dirs, *files]
|
||||
|
||||
|
||||
def sort_branch(lst):
|
||||
|
@ -35,7 +36,7 @@ def sort_branch(lst):
|
|||
# def make_tree(path="templates/content"):
|
||||
# '''
|
||||
# creates a dictionary of the directories and files of the doc repository
|
||||
# '''
|
||||
# '''
|
||||
# if '/' in path:
|
||||
# tree = dict(name=path, children=[], type="directory")
|
||||
# else:
|
||||
|
@ -82,17 +83,16 @@ def rem_readme(path, tree):
|
|||
which will be index.html
|
||||
path can be dynamically configured and may have a / at the end nor not
|
||||
'''
|
||||
#if path.endswith('/'):
|
||||
# path = path[:-1]
|
||||
#index = f"{path}/README.md"
|
||||
#for item in tree['children']:
|
||||
# if isinstance(item, dict):
|
||||
# for k,v in item.items():
|
||||
# if k == "name":
|
||||
# if v == index:
|
||||
# del tree['children'][-1][k]
|
||||
index = f"{path.rstrip('/')}/README.md"
|
||||
for item in tree['children']:
|
||||
if isinstance(item, dict):
|
||||
for k, v in item.items():
|
||||
if k == "name":
|
||||
if v == index:
|
||||
del tree['children'][-1][k]
|
||||
return tree
|
||||
|
||||
|
||||
def cut_path_tree(tree, subdir, file_ending):
|
||||
'''
|
||||
pruning of the tree structure from make_tree()
|
||||
|
@ -109,6 +109,7 @@ def cut_path_tree(tree, subdir, file_ending):
|
|||
cut_path_tree(item, subdir, file_ending)
|
||||
return tree
|
||||
|
||||
|
||||
def cut_filetype_tree(tree, filetype):
|
||||
'''
|
||||
removes file type of the links stored in make_tree()
|
||||
|
@ -122,36 +123,31 @@ def cut_filetype_tree(tree, filetype):
|
|||
cut_filetype_tree(item, filetype)
|
||||
return tree
|
||||
|
||||
def list_files(path):
|
||||
'''
|
||||
creates a simple, one dimensional list of the doc repository
|
||||
filters markdown files only
|
||||
'''
|
||||
doc_files = []
|
||||
for root, dirs, files in os.walk(path):
|
||||
for file in files:
|
||||
if file.endswith(".md") and not ".git" in root:
|
||||
doc_files.append(os.path.join(root,file))
|
||||
return doc_files
|
||||
|
||||
# def build_index(path, file_ending):
|
||||
# def list_files(path):
|
||||
# '''
|
||||
# builds the searchable JSON object containing all markdown files
|
||||
# with metadata
|
||||
# '''
|
||||
# searchable = dict(index=[])
|
||||
# file_list = list_files(path)
|
||||
# for item in file_list:
|
||||
# if item.endswith(file_ending):
|
||||
# with open(item, 'r') as _f:
|
||||
# data = _f.readlines()
|
||||
# data[0] = data[0].strip('# \n')
|
||||
# #searchable[data[0]] = [''.join(data), item[len(path):-len(file_ending)]]
|
||||
# searchable["index"].append(dict(uri= "/" + item[len(path):-len(file_ending)] + '.html', title=data[0],tags=[],content=''.join(data), description=""))
|
||||
# #searchable[str(uuid.uuid1())] = (dict(href=item[len(path):-len(file_ending)], title=data[0],tags=[],content=''.join(data)))
|
||||
# if isinstance(item, dict):
|
||||
# build_index(item)
|
||||
# return searchable
|
||||
# creates a simple, one dimensional list of the doc repository
|
||||
# filters markdown files only
|
||||
# '''
|
||||
# doc_files = []
|
||||
# for root, dirs, files in os.walk(path):
|
||||
# for file in files:
|
||||
# if file.endswith(".md") and not ".git" in root:
|
||||
# doc_files.append(os.path.join(root, file))
|
||||
# return doc_files
|
||||
|
||||
|
||||
def list_files(path):
|
||||
"""
|
||||
Creates a simple, one-dimensional list of the doc repository.
|
||||
Filters markdown files only.
|
||||
"""
|
||||
return [
|
||||
file for file in glob.glob(
|
||||
os.path.join(path, '**/*.md'), recursive=True
|
||||
)
|
||||
if '.git' not in file
|
||||
]
|
||||
|
||||
|
||||
def build_index(path, file_ending):
|
||||
|
|
|
@ -10,7 +10,7 @@ import markdown.extensions.codehilite
|
|||
import markdown.extensions.toc
|
||||
from markdown.extensions.toc import TocExtension
|
||||
from pygments.formatters import HtmlFormatter
|
||||
from husk_helpers import make_tree, cut_path_tree, cut_filetype_tree, list_files, build_index, rem_readme
|
||||
from husk_helpers import make_tree, cut_path_tree, cut_filetype_tree, list_files, build_index # , rem_readme
|
||||
import toml
|
||||
|
||||
app = Flask(__name__)
|
||||
|
@ -21,7 +21,7 @@ content_path = app.config["husk"]["content"]["path"]
|
|||
highlight_style = app.config["husk"]["content"]["style"]
|
||||
STYLESHEET = "stylesheet.css"
|
||||
STYLESHEET_AUTO_COMPLETE = "auto-complete.css"
|
||||
project_name = app.config["husk"]["project"]["name"]
|
||||
project_name = app.config["husk"]["project"]["name"]
|
||||
project_title = app.config["husk"]["project"]["title"]
|
||||
|
||||
app.config["husk"]["style"] = toml.load("style.toml")
|
||||
|
@ -33,38 +33,67 @@ def index():
|
|||
searchable = build_index(content_path, ".md")
|
||||
response = make_response(searchable)
|
||||
response.headers["Content-Type"] = "application/json"
|
||||
#response.headers["Content-Encoding"] = "gzip"
|
||||
# response.headers["Content-Encoding"] = "gzip"
|
||||
response.cache_control.max_age = 420
|
||||
return response
|
||||
|
||||
|
||||
@app.route('/', defaults={'path': 'README'})
|
||||
@app.route('/<path:path>.html')
|
||||
def content(path="README"):
|
||||
with open(os.path.join(app.root_path, content_path, f'{path}.md'), "r") as _f:
|
||||
md_file_path = os.path.join(app.root_path, content_path, f'{path}.md')
|
||||
with open(md_file_path, "r") as _f:
|
||||
md_file = _f.read()
|
||||
md = markdown.Markdown(extensions=['toc',TocExtension(toc_class="", title=""),"fenced_code", "codehilite", "tables", "mdx_math"], extension_configs={"mdx_math": {"enable_dollar_delimiter": True}})
|
||||
md_extensions = [
|
||||
'toc',
|
||||
TocExtension(toc_class="", title=""),
|
||||
"fenced_code",
|
||||
"codehilite",
|
||||
"tables",
|
||||
"mdx_math"
|
||||
]
|
||||
md_configs = {"mdx_math": {"enable_dollar_delimiter": True}}
|
||||
md = markdown.Markdown(
|
||||
extensions=md_extensions,
|
||||
extension_configs=md_configs
|
||||
)
|
||||
html = md.convert(md_file)
|
||||
formatter = HtmlFormatter(style=highlight_style, full=True, cssclass="codehilite")
|
||||
formatter = HtmlFormatter(
|
||||
style=highlight_style,
|
||||
full=True,
|
||||
cssclass="codehilite"
|
||||
)
|
||||
css_string = formatter.get_style_defs()
|
||||
md_css_string = "<style>" + css_string + "</style>"
|
||||
md_template = md_css_string + html
|
||||
res = render_template(
|
||||
"documentation.html",
|
||||
toc=md.toc, md_doc=md_template,
|
||||
colors = colors,
|
||||
stylesheet=STYLESHEET, stylesheet_auto_complete=STYLESHEET_AUTO_COMPLETE,
|
||||
project_name=project_name, project_title=project_title,
|
||||
tree=cut_path_tree(
|
||||
rem_readme(content_path, make_tree(content_path))
|
||||
, content_path, ".md")
|
||||
"documentation.html",
|
||||
toc=md.toc,
|
||||
md_doc=md_template,
|
||||
colors=colors,
|
||||
stylesheet=STYLESHEET,
|
||||
stylesheet_auto_complete=STYLESHEET_AUTO_COMPLETE,
|
||||
project_name=project_name,
|
||||
project_title=project_title,
|
||||
tree=cut_path_tree(
|
||||
#rem_readme(content_path, make_tree(content_path)),
|
||||
make_tree(content_path),
|
||||
content_path,
|
||||
".md"
|
||||
)
|
||||
)
|
||||
response = make_response(res)
|
||||
response.headers["Content-Type"]: "text/html; charset=utf-8"
|
||||
response.headers["Content-Type"] = "text/html; charset=utf-8"
|
||||
return response
|
||||
|
||||
|
||||
@app.route('/favicon.ico')
|
||||
def favicon():
|
||||
return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico')
|
||||
return send_from_directory(
|
||||
os.path.join(app.root_path, 'static'),
|
||||
'favicon.ico'
|
||||
)
|
||||
|
||||
|
||||
with app.test_request_context():
|
||||
print(f"Front page is {url_for('content', md_file='README')}")
|
||||
|
|
|
@ -4,7 +4,10 @@
|
|||
{% block head %}
|
||||
<meta charset="UTF-8">
|
||||
<script src="https://cdn.jsdelivr.net/npm/fuse.js/dist/fuse.js"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.7.0.min.js"
|
||||
integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g="
|
||||
crossorigin="anonymous"></script>
|
||||
<script type="text/javascript" src="{{ url_for('static', filename='js/auto-complete.js') }}"></script>
|
||||
<script type="text/javascript" src="{{ url_for('static', filename='js/lunr.min.js')}}"></script>
|
||||
<script type="text/javascript" src="{{ url_for('static', filename='js/search.js')}}"></script>
|
||||
|
@ -94,23 +97,18 @@
|
|||
</body>
|
||||
<script>
|
||||
function linkClick(obj) {
|
||||
if (obj.open) {
|
||||
//console.log('open');
|
||||
if (sessionStorage.getItem(obj.id) && !(sessionStorage.getItem(obj.id) === "open")) {
|
||||
sessionStorage.removeItem(obj.id);
|
||||
}
|
||||
sessionStorage.setItem(obj.id,"open");
|
||||
//console.log(obj.id);
|
||||
} else {
|
||||
//console.log('closed');
|
||||
if (obj.open) {
|
||||
if (sessionStorage.getItem(obj.id) && !(sessionStorage.getItem(obj.id) === "open")) {
|
||||
sessionStorage.removeItem(obj.id);
|
||||
}
|
||||
sessionStorage.setItem(obj.id,"open");
|
||||
} else {
|
||||
sessionStorage.removeItem(obj.id);
|
||||
}
|
||||
}
|
||||
let _keys = Object.keys(sessionStorage);
|
||||
if (_keys) {
|
||||
for ( let i = 0; i < _keys.length; i++ ) {
|
||||
document.getElementById(_keys[i])['open'] = 'open';
|
||||
}
|
||||
for (let i = 0; i < sessionStorage.length; i++) {
|
||||
const key = sessionStorage.key(i);
|
||||
document.getElementById(key).open = "open";
|
||||
}
|
||||
</script>
|
||||
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>
|
||||
|
|
Loading…
Reference in New Issue