diff --git a/issues/templates/issues/base.html b/issues/templates/issues/base.html
index a06a2b4..5adb8bb 100644
--- a/issues/templates/issues/base.html
+++ b/issues/templates/issues/base.html
@@ -108,6 +108,7 @@
Event List
History
Grouping
+ Breadcrumbs
diff --git a/issues/templates/issues/issue_breadcrumbs.html b/issues/templates/issues/issue_breadcrumbs.html
new file mode 100644
index 0000000..b062cc4
--- /dev/null
+++ b/issues/templates/issues/issue_breadcrumbs.html
@@ -0,0 +1,39 @@
+{% extends "issues/base.html" %}
+{% load static %}
+{% load stricter_templates %}
+{% load issues %}
+
+{% block tab_content %}
+
+
+{# #}
+
+{% for breadcrumb in parsed_data.breadcrumbs.values %}
+
+
+ |
+ {{ breadcrumb.category }}
+ |
+
+ {% comment %}
+ {# not _that_ useful
+
+ {{ breadcrumb.type }}
+ |
+ {% endcomment %}
+
+
+ {{ breadcrumb.message }}
+ |
+
+ {{ breadcrumb.timestamp }}
+ {# {{ breadcrumb.timestamp|date:"G:i" and milis }} #}
+ |
+
+
+ {% endfor %}
+
+
+
+
+{% endblock %}
diff --git a/issues/urls.py b/issues/urls.py
index 88a8873..943aaad 100644
--- a/issues/urls.py
+++ b/issues/urls.py
@@ -2,7 +2,7 @@ from django.urls import path
from .views import (
issue_list, issue_event_stacktrace, issue_event_details, issue_last_event, issue_event_list, issue_history,
- issue_grouping)
+ issue_grouping, issue_event_breadcrumbs)
urlpatterns = [
path('
/', issue_list, {"state_filter": "open"}, name="issue_list_open"),
@@ -13,6 +13,7 @@ urlpatterns = [
path('issue//event//', issue_event_stacktrace),
path('issue//event//details/', issue_event_details),
+ path('issue//event//breadcrumbs/', issue_event_breadcrumbs),
path('issue//history/', issue_history),
path('issue//grouping/', issue_grouping),
path('issue//event/last/', issue_last_event),
diff --git a/issues/views.py b/issues/views.py
index 1340517..35d3f41 100644
--- a/issues/views.py
+++ b/issues/views.py
@@ -200,6 +200,26 @@ def issue_event_stacktrace(request, issue, event_pk):
})
+@issue_membership_required
+def issue_event_breadcrumbs(request, issue, event_pk):
+ if request.method == "POST":
+ return _handle_post(request, issue)
+
+ event = get_object_or_404(Event, pk=event_pk)
+
+ parsed_data = json.loads(event.data)
+
+ return render(request, "issues/issue_breadcrumbs.html", {
+ "tab": "breadcrumbs",
+ "project": issue.project,
+ "issue": issue,
+ "event": event,
+ "is_event_page": True,
+ "parsed_data": parsed_data,
+ "mute_options": GLOBAL_MUTE_OPTIONS,
+ })
+
+
@issue_membership_required
def issue_event_details(request, issue, event_pk):
if request.method == "POST":
diff --git a/theme/static/css/dist/styles.css b/theme/static/css/dist/styles.css
index 1966e2d..9078016 100644
--- a/theme/static/css/dist/styles.css
+++ b/theme/static/css/dist/styles.css
@@ -1319,6 +1319,10 @@ select {
text-align: center;
}
+.align-top {
+ vertical-align: top;
+}
+
.font-mono {
font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}