1
0
mirror of https://github.com/checktheroads/hyperglass synced 2024-05-11 05:55:08 +00:00

re-add query help

This commit is contained in:
checktheroads
2019-08-20 18:52:29 -07:00
parent 918ef85a8d
commit bfb89a5e5a
5 changed files with 97 additions and 26 deletions

View File

@@ -105,26 +105,54 @@ ets/traceroute_nanog.pdf" target="_blank">click here</a>.
}
def generate_markdown(section, file_name):
default_help = """
---
template: default_help
---
##### BGP Route
Performs BGP table lookup based on IPv4/IPv6 prefix.
<hr>
##### BGP Community
Performs BGP table lookup based on <a href="https://tools.ietf.org/html/rfc4360" target\
="_blank">Extended</a> or <a href="https://tools.ietf.org/html/rfc8195" target=\
"_blank">Large</a> community value.
<hr>
##### BGP AS Path
Performs BGP table lookup based on `AS_PATH` regular expression.
<hr>
##### Ping
Sends 5 ICMP echo requests to the target.
<hr>
##### Traceroute
Performs UDP Based traceroute to the target.<br>For information about how to \
interpret traceroute results, <a href="https://hyperglass.readthedocs.io/en/latest/ass\
ets/traceroute_nanog.pdf" target="_blank">click here</a>.
"""
def generate_markdown(section, file_name=None):
"""
Renders markdown as HTML. If file_name exists in appropriate
directory, it will be imported and used. If not, the default values
will be used. Also renders the Front Matter values within each
template.
"""
if section == "info":
file = working_directory.joinpath(f"templates/info/{file_name}.md")
defaults = default_info
elif section == "details":
file = working_directory.joinpath(f"templates/info/details/{file_name}.md")
defaults = default_details
if section == "help":
file = working_directory.joinpath("templates/info/help.md")
if file.exists():
with file.open(mode="r") as file_raw:
yaml_raw = file_raw.read()
else:
yaml_raw = defaults[file_name]
yaml_raw = default_help
elif section == "details":
file = working_directory.joinpath(f"templates/info/details/{file_name}.md")
if file.exists():
with file.open(mode="r") as file_raw:
yaml_raw = file_raw.read()
else:
yaml_raw = default_details[file_name]
_, frontmatter, content = yaml_raw.split("---", 2)
html_classes = {"table": "ui compact table"}
html_classes = {"table": "table"}
markdown = Markdown(
extras={
"break-on-newline": True,
@@ -169,15 +197,17 @@ def render_html(template_name, **kwargs):
details_data = generate_markdown("details", details_name)
details_dict.update({details_name: details_data})
info_list = ["bgp_route", "bgp_aspath", "bgp_community", "ping", "traceroute"]
info_dict = {}
for info_name in info_list:
info_data = generate_markdown("info", info_name)
info_dict.update({info_name: info_data})
rendered_help = generate_markdown("help")
logger.debug(rendered_help)
try:
template_file = f"templates/{template_name}.html.j2"
template = env.get_template(template_file)
return template.render(
params, info=info_dict, details=details_dict, networks=networks, **kwargs
params,
rendered_help=rendered_help,
details=details_dict,
networks=networks,
**kwargs,
)
except jinja2.TemplateNotFound as template_error:
logger.error(

View File

@@ -29,7 +29,7 @@
{% block content %}
{% endblock %}
</main>
<button class="animsition btn btn-link text-primary hg-back" id="hg-back-btn" data-animsition-out-class="fade-out-left" data-animsition-in-class="fade-in-left">
<button class="animsition btn btn-link text-primary hg-back d-none" id="hg-back-btn" data-animsition-out-class="fade-out-left" data-animsition-in-class="fade-in-left">
<i class="remixicon-arrow-left-s-line"></i>
</button>
{% include "templates/footer.html.j2" %}

View File

@@ -2,16 +2,27 @@
<nav class="navbar fixed-bottom navbar-footer bg-footer">
<div class="container-fluid text-center p-0">
<div class="col-auto float-left">
<a class="btn btn-link hg-footer-item" href="#" data-toggle="popover" title="{{ branding.text.terms }}"
data-content="{{ details.footer.content | safe }}"><small>{{ branding.text.terms }}</small></a>
<div class="d-none" id="hg-footer-terms-html">{{ details.footer.content | safe }}</div>
<a class="btn btn-link hg-footer-item" id="hg-footer-terms-btn" href="#" data-toggle="popover"
title="{{ branding.text.terms }}"><small>{{ branding.text.terms }}</small></a>
</div>
<div class="col-auto float-left">
<a class="btn btn-link" href="#"><small>{{ branding.text.info }}</small></a>
<div class="d-none" id="hg-footer-help-html">{{ rendered_help.content | safe }}</div>
<a class="btn btn-link hg-footer-item" id="hg-footer-help-btn" href="#" data-toggle="popover"
title="{{ branding.text.info }}"><small>{{ branding.text.info }}</small></a>
</div>
<div class="col-auto mr-auto"></div>
{% if branding.credit.enable %}
<div class="col-auto float-right">
<a class="btn btn-link" href="#"><small><i class="remixicon-braces-line" id="hg-credit"></i></small></a>
<div class="d-none" id="hg-footer-credit-title">
Powered by <a href="https://github.com/checktheroads/hyperglass" target="_blank">hyperglass</a>.
</div>
<div class="d-none" id="hg-footer-credit-content">
Source code licensed <a href="https://github.com/checktheroads/hyperglass/blob/master/LICENSE"
target="_blank">BSD 3-Clause Clear.</a>
</div>
<a class="btn btn-link" id="hg-footer-credit-btn" href="#" data-toggle="popover"><small><i
class="remixicon-code-s-slash-line"></i></small></a>
</div>
{% endif %}
{% if branding.peering_db.enable %}

View File

@@ -14,6 +14,10 @@ const resultsContainer = $('#hg-results');
const formContainer = $('#hg-form');
const resultsAccordion = $('#hg-accordion');
const backButton = $('#hg-back-btn');
const footerHelpBtn = $('#hg-footer-help-btn');
const footerTermsBtn = $('#hg-footer-terms-btn');
const footerCreditBtn = $('#hg-footer-credit-btn');
const footerPopoverTemplate = '<div class="popover mw-sm-75 mw-md-50 mw-lg-25" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>';
const resetResults = () => {
queryLocation.selectpicker('deselectAll');
@@ -24,7 +28,7 @@ const resetResults = () => {
resultsContainer.hide();
formContainer.show();
formContainer.animsition('in');
backButton.hide();
backButton.addClass('d-none');
resultsAccordion.empty();
};
@@ -52,11 +56,35 @@ queryType.selectpicker({
tickIcon: 'remixicon-check-line',
});
footerTermsBtn.popover({
html: true,
trigger: 'click',
template: footerPopoverTemplate,
placement: 'top',
content: $('#hg-footer-terms-html').html(),
});
footerHelpBtn.popover({
html: true,
trigger: 'click',
placement: 'top',
template: footerPopoverTemplate,
content: $('#hg-footer-help-html').html(),
});
footerCreditBtn.popover({
html: true,
trigger: 'click',
placement: 'top',
title: $('#hg-footer-credit-title').html(),
content: $('#hg-footer-credit-content').html(),
template: footerPopoverTemplate,
});
$(document).ready(() => {
reloadPage();
resultsContainer.hide();
$('#hg-ratelimit-query').modal('hide');
backButton.hide();
$('.animsition').animsition({
inClass: 'fade-in',
outClass: 'fade-out',
@@ -198,7 +226,7 @@ $('#lgForm').submit((event) => {
$('#hg-results').show();
$('#hg-results').animsition('in');
$('#hg-submit-spinner').remove();
$('#hg-back-btn').show();
$('#hg-back-btn').removeClass('d-none');
$('#hg-back-btn').animsition('in');
});

View File

@@ -284,7 +284,7 @@
width: 3rem !important
height: 3rem !important
left: 2rem !important
bottom: 2rem !important
bottom: 5rem !important
border-radius: 50rem !important
border: 1px solid $card-border-color !important
transition: all .3s !important
@@ -430,3 +430,5 @@
.modal-title
padding-bottom: 1rem !important
.popover