mirror of
https://github.com/tiyn/amphora-wiki.git
synced 2025-04-10 02:57:45 +02:00
Compare commits
2 Commits
4dbd75a1a9
...
563ac37e5e
Author | SHA1 | Date | |
---|---|---|---|
563ac37e5e | |||
f766803f3b |
38
src/app.py
38
src/app.py
@ -18,38 +18,38 @@ STYLE = config.STYLE
|
|||||||
|
|
||||||
@app.errorhandler(404)
|
@app.errorhandler(404)
|
||||||
def page_not_found(e):
|
def page_not_found(e):
|
||||||
return render_template('error.html', title=TITLE, errorcode='404', style=STYLE), 404
|
return render_template("error.html", title=TITLE, errorcode="404", style=STYLE), 404
|
||||||
|
|
||||||
|
|
||||||
@app.route('/')
|
@app.route("/")
|
||||||
@app.route('/index.html')
|
@app.route("/index.html")
|
||||||
def index():
|
def index():
|
||||||
return render_template('index.html', title=TITLE, style=STYLE), 200
|
return render_template("index.html", title=TITLE, style=STYLE), 200
|
||||||
|
|
||||||
|
|
||||||
@app.route('/search', methods=['GET', 'POST'])
|
@app.route("/search", methods=["GET", "POST"])
|
||||||
@app.route('/search.html', methods=['GET', 'POST'])
|
@app.route("/search.html", methods=["GET", "POST"])
|
||||||
def search():
|
def search():
|
||||||
form = SearchForm()
|
form = SearchForm()
|
||||||
if request.method == 'POST':
|
if request.method == "POST":
|
||||||
query_str = request.form['query_str']
|
query_str = request.form["query_str"]
|
||||||
content = cont.gen_query_res_string(query_str)
|
content = cont.gen_query_res_string(query_str)
|
||||||
return render_template('search.html', title=TITLE, style=STYLE, form=form, content=content), 200
|
return render_template("search.html", title=TITLE, style=STYLE, form=form, content=content), 200
|
||||||
return render_template('search.html', title=TITLE, style=STYLE, form=form, content=''), 200
|
return render_template("search.html", title=TITLE, style=STYLE, form=form, content=""), 200
|
||||||
|
|
||||||
|
|
||||||
@app.route('/entry/<path:fullurl>')
|
@app.route("/entry/<path:fullurl>")
|
||||||
def entry(fullurl):
|
def entry(fullurl):
|
||||||
content = cont.gen_stand_string(fullurl)
|
content = cont.gen_stand_string(fullurl)
|
||||||
return render_template('entry.html', title=TITLE, style=STYLE, content=content), 200
|
return render_template("entry.html", title=TITLE, style=STYLE, content=content), 200
|
||||||
|
|
||||||
@app.route('/namespace/', defaults={'fullurl': ''})
|
@app.route("/namespace/", defaults={"fullurl": ""})
|
||||||
@app.route('/namespace/<path:fullurl>')
|
@app.route("/namespace/<path:fullurl>")
|
||||||
def namespace(fullurl=''):
|
def namespace(fullurl=""):
|
||||||
content = cont.gen_arch_string(fullurl)
|
content = cont.gen_arch_string(fullurl)
|
||||||
if content == None:
|
if content == None:
|
||||||
return render_template('error.html', title=TITLE, errorcode='404', style=STYLE), 404
|
return render_template("error.html", title=TITLE, errorcode="404", style=STYLE), 404
|
||||||
return render_template('entry.html', title=TITLE, style=STYLE, content=content), 200
|
return render_template("entry.html", title=TITLE, style=STYLE, content=content), 200
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == "__main__":
|
||||||
app.run(host='0.0.0.0')
|
app.run(host="0.0.0.0")
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
# Name/title of your blog
|
# Name/title of your blog
|
||||||
TITLE = 'Amphora Wiki'
|
TITLE = "Amphora Wiki"
|
||||||
|
|
||||||
# URL for your website: e.g. https://domain.tld
|
# URL for your website: e.g. https://domain.tld
|
||||||
WEBSITE = 'localhost:5000'
|
WEBSITE = "localhost:5000"
|
||||||
|
|
||||||
# Theme for the blog: dark, light
|
# Theme for the blog: dark, light
|
||||||
STYLE = 'dark'
|
STYLE = "dark"
|
||||||
|
|
||||||
###############################################
|
###############################################
|
||||||
## NO CHANGES RECOMMENDED ##
|
## NO CHANGES RECOMMENDED ##
|
||||||
###############################################
|
###############################################
|
||||||
ENTRY_DIR = 'templates/entry'
|
ENTRY_DIR = "templates/entry"
|
||||||
|
@ -26,13 +26,13 @@ def gen_stand_string(path_ex):
|
|||||||
string: html-formatted string string equivalent to the file
|
string: html-formatted string string equivalent to the file
|
||||||
"""
|
"""
|
||||||
filename = os.path.join(ENTRY_DIR, path_ex)
|
filename = os.path.join(ENTRY_DIR, path_ex)
|
||||||
result = ''
|
result = ""
|
||||||
if path.exists(filename):
|
if path.exists(filename):
|
||||||
title = open(filename,encoding='utf-8').readline().rstrip('\n').lstrip('#').lstrip(' ')
|
title = open(filename,encoding="utf-8").readline().rstrip("\n").lstrip("#").lstrip(" ")
|
||||||
text = open(filename,encoding='utf-8').readlines()[1:]
|
text = open(filename,encoding="utf-8").readlines()[1:]
|
||||||
filename_no_end = filename.split('.', 1)[0]
|
filename_no_end = filename.split(".", 1)[0]
|
||||||
result += '<h1>' + title + '</h1>\n'
|
result += "<h1>" + title + "</h1>\n"
|
||||||
if filename.endswith('.md'):
|
if filename.endswith(".md"):
|
||||||
result += gen_md_content(filename, 1)
|
result += gen_md_content(filename, 1)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@ -48,18 +48,18 @@ def gen_md_content(path_ex, depth):
|
|||||||
Returns:
|
Returns:
|
||||||
string: html-formatted string string equivalent to the markdown file
|
string: html-formatted string string equivalent to the markdown file
|
||||||
"""
|
"""
|
||||||
result = ''
|
result = ""
|
||||||
if path.exists(path_ex):
|
if path.exists(path_ex):
|
||||||
filename = path_ex.split('.', 1)
|
filename = path_ex.split(".", 1)
|
||||||
fileend = filename[len(filename) - 1]
|
fileend = filename[len(filename) - 1]
|
||||||
header = '#'
|
header = "#"
|
||||||
for i in range(depth):
|
for i in range(depth):
|
||||||
header += '#'
|
header += "#"
|
||||||
header += ' '
|
header += " "
|
||||||
markdown_lines = open(path_ex, 'r',encoding='utf-8').readlines()[1:]
|
markdown_lines = open(path_ex, "r",encoding="utf-8").readlines()[1:]
|
||||||
markdown_text = ''
|
markdown_text = ""
|
||||||
for line in markdown_lines:
|
for line in markdown_lines:
|
||||||
markdown_text += line.replace('# ', header)
|
markdown_text += line.replace("# ", header)
|
||||||
result = markdown.markdown(
|
result = markdown.markdown(
|
||||||
markdown_text, extensions=["fenced_code", "tables", "nl2br"])
|
markdown_text, extensions=["fenced_code", "tables", "nl2br"])
|
||||||
return result
|
return result
|
||||||
@ -80,28 +80,28 @@ def gen_arch_string(path_ex):
|
|||||||
name_list = os.listdir(full_path)
|
name_list = os.listdir(full_path)
|
||||||
full_list = [os.path.join(full_path, i) for i in name_list]
|
full_list = [os.path.join(full_path, i) for i in name_list]
|
||||||
contents = sorted(full_list, key=os.path.getctime)
|
contents = sorted(full_list, key=os.path.getctime)
|
||||||
content_string = ''
|
content_string = ""
|
||||||
last_month = ''
|
last_month = ""
|
||||||
for file in reversed(contents):
|
for file in reversed(contents):
|
||||||
filename = pathlib.PurePath(file)
|
filename = pathlib.PurePath(file)
|
||||||
if os.path.isfile(filename):
|
if os.path.isfile(filename):
|
||||||
title = open(filename).readline().rstrip('\n').lstrip('#').lstrip(' ')
|
title = open(filename).readline().rstrip("\n").lstrip("#").lstrip(" ")
|
||||||
entry_or_namespace = 'entry'
|
entry_or_namespace = "entry"
|
||||||
elif os.path.isdir(filename):
|
elif os.path.isdir(filename):
|
||||||
title = filename.name
|
title = filename.name
|
||||||
entry_or_namespace = 'namespace'
|
entry_or_namespace = "namespace"
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
filename = filename.name
|
filename = filename.name
|
||||||
if filename[0] != '.' and filename.__contains__('.'):
|
if filename[0] != "." and filename.__contains__("."):
|
||||||
filename = filename.split('.', 1)[0]
|
filename = filename.split(".", 1)[0]
|
||||||
content_string += '<li>'
|
content_string += "<li>"
|
||||||
content_string += title + ' ['
|
content_string += title + " ["
|
||||||
content_string += '<a href="' + '/'+ entry_or_namespace +'/' + \
|
content_string += "<a href=\"" + "/"+ entry_or_namespace +"/" + \
|
||||||
path_ex.rstrip("/") + '/' + pathlib.PurePath(file).name + '">' + 'standalone' + '</a>'
|
path_ex.rstrip("/") + "/" + pathlib.PurePath(file).name + "\">" + "standalone" + "</a>"
|
||||||
content_string += '] <br>'
|
content_string += "] <br>"
|
||||||
content_string += '</li>\n'
|
content_string += "</li>\n"
|
||||||
content_string += '</ul>\n'
|
content_string += "</ul>\n"
|
||||||
return content_string
|
return content_string
|
||||||
|
|
||||||
|
|
||||||
@ -117,17 +117,17 @@ def gen_query_res_string(query_str):
|
|||||||
string: html-formated search result
|
string: html-formated search result
|
||||||
"""
|
"""
|
||||||
src_results = search.search(query_str)
|
src_results = search.search(query_str)
|
||||||
res_string = ''
|
res_string = ""
|
||||||
res_string += '<ul>\n'
|
res_string += "<ul>\n"
|
||||||
for result in src_results:
|
for result in src_results:
|
||||||
title = result['title']
|
title = result["title"]
|
||||||
path = result['path']
|
path = result["path"]
|
||||||
preview = create_preview(path)
|
preview = create_preview(path)
|
||||||
path = '/entry/' + path.split('/', 2)[2]
|
path = "/entry/" + path.split("/", 2)[2]
|
||||||
res_string += '<li><a href="' + path + '">' + markdown.markdown(title) + '</a><br>'
|
res_string += "<li><a href=\"" + path + "\">" + markdown.markdown(title) + "</a><br>"
|
||||||
res_string += '<div class="description">' + preview + '</div>'
|
res_string += "<div class=\"description\">" + preview + "</div>"
|
||||||
res_string += '</li>'
|
res_string += "</li>"
|
||||||
res_string += '</ul>\n'
|
res_string += "</ul>\n"
|
||||||
return res_string
|
return res_string
|
||||||
|
|
||||||
|
|
||||||
@ -141,9 +141,9 @@ def create_preview(path):
|
|||||||
Returns:
|
Returns:
|
||||||
string: html-formated preview
|
string: html-formated preview
|
||||||
"""
|
"""
|
||||||
file = open(path, 'r',encoding='utf-8')
|
file = open(path, "r",encoding="utf-8")
|
||||||
first_lines = file.readlines()
|
first_lines = file.readlines()
|
||||||
preview = ''
|
preview = ""
|
||||||
preview_length = 3
|
preview_length = 3
|
||||||
for i, line in enumerate(first_lines):
|
for i, line in enumerate(first_lines):
|
||||||
if i == 0:
|
if i == 0:
|
||||||
@ -151,10 +151,10 @@ def create_preview(path):
|
|||||||
if i > preview_length:
|
if i > preview_length:
|
||||||
break
|
break
|
||||||
if not line.isspace():
|
if not line.isspace():
|
||||||
preview += markdown.markdown(line) + '<br>'
|
preview += markdown.markdown(line) + "<br>"
|
||||||
else:
|
else:
|
||||||
preview_length += 1
|
preview_length += 1
|
||||||
preview += '...<br>'
|
preview += "...<br>"
|
||||||
return preview
|
return preview
|
||||||
|
|
||||||
print(gen_arch_string('system-software'))
|
print(gen_arch_string("system-software"))
|
||||||
|
@ -29,7 +29,7 @@ def createSearchableData(root):
|
|||||||
for r, d, f in os.walk(root):
|
for r, d, f in os.walk(root):
|
||||||
for file in f:
|
for file in f:
|
||||||
path = os.path.join(r, file)
|
path = os.path.join(r, file)
|
||||||
fp = open(path,encoding='utf-8')
|
fp = open(path,encoding="utf-8")
|
||||||
title = fp.readline()
|
title = fp.readline()
|
||||||
text = title + fp.read()
|
text = title + fp.read()
|
||||||
writer.add_document(title=title, path=path, content=text)
|
writer.add_document(title=title, path=path, content=text)
|
||||||
@ -55,7 +55,7 @@ def search_times(query_str, topN):
|
|||||||
matches = s.search(query, limit=topN)
|
matches = s.search(query, limit=topN)
|
||||||
for match in matches:
|
for match in matches:
|
||||||
results.append(
|
results.append(
|
||||||
{'title': match['title'], 'path': match['path'], 'match': match.score})
|
{"title": match["title"], "path": match["path"], "match": match.score})
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,9 +13,9 @@
|
|||||||
<input type="checkbox" id="main-menu-check">
|
<input type="checkbox" id="main-menu-check">
|
||||||
<label for="main-menu-check" class="show-menu">☰</label>
|
<label for="main-menu-check" class="show-menu">☰</label>
|
||||||
<div class="main-menu">
|
<div class="main-menu">
|
||||||
<a href="/">Startpage</a>
|
<a href="{{ url_for('index') }}">Startpage</a>
|
||||||
<a href="/namespace">Namespaces</a>
|
<a href="{{ url_for('namespace') }}">Namespaces</a>
|
||||||
<a href="/search">Search</a>
|
<a href="{{ url_for('search') }}">Search</a>
|
||||||
<label for="main-menu-check" class="hide-menu">X</label>
|
<label for="main-menu-check" class="hide-menu">X</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -26,7 +26,7 @@
|
|||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
<footer>
|
<footer>
|
||||||
<div class="center">
|
<div class="center">
|
||||||
Made with <a href="https://github.com/tiyn/tiyny-wiki">Amphora Wiki</a>.
|
Made with <a href="https://github.com/tiyn/amphora-wiki">Amphora Wiki</a>.
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user