diff --git a/allianceauth/authentication/urls.py b/allianceauth/authentication/urls.py
index 11fee0b9..60f89cdc 100644
--- a/allianceauth/authentication/urls.py
+++ b/allianceauth/authentication/urls.py
@@ -1,5 +1,4 @@
from django.conf.urls import url
-from django.contrib.auth.decorators import login_required
from django.views.generic.base import TemplateView
from . import views
@@ -24,4 +23,9 @@ urlpatterns = [
name='add_character'
),
url(r'^dashboard/$', views.dashboard, name='dashboard'),
+ url(
+ r'^notifications_render/$',
+ views.notifications_render,
+ name='notifications_render'
+ ),
]
diff --git a/allianceauth/authentication/views.py b/allianceauth/authentication/views.py
index 98b93a62..d50ba245 100644
--- a/allianceauth/authentication/views.py
+++ b/allianceauth/authentication/views.py
@@ -6,11 +6,13 @@ from django.contrib.auth import login, authenticate
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.core import signing
-from django.urls import reverse
+from django.http import HttpResponse
from django.shortcuts import redirect, render
+from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from allianceauth.eveonline.models import EveCharacter
+
from esi.decorators import token_required
from esi.models import Token
@@ -59,6 +61,14 @@ def dashboard(request):
return render(request, 'authentication/dashboard.html', context)
+@login_required
+def notifications_render(request):
+ """returns html to render the notifications item in the top menu"""
+ unread_count = request.user.notification_set.filter(viewed=False).count()
+ context = {'notifications': unread_count}
+ return render(request, 'allianceauth/notifications_menu_item.html', context)
+
+
@login_required
@token_required(scopes=settings.LOGIN_TOKEN_SCOPES)
def main_character_change(request, token):
diff --git a/allianceauth/static/js/base.js b/allianceauth/static/js/base.js
new file mode 100644
index 00000000..e8b64b45
--- /dev/null
+++ b/allianceauth/static/js/base.js
@@ -0,0 +1,27 @@
+/*
+ Javascript for the base template
+*/
+
+$(function() {
+ var elem = document.getElementById("dataExport");
+ var notificationsRenderUrl = elem.getAttribute("data-notificationsRenderUrl");
+
+ // render the notifications item in the top menu
+ function render_notifications(){
+ $("#menu_item_notifications").load(
+ notificationsRenderUrl,
+ function(responseTxt, statusTxt, xhr){
+ if(statusTxt == "error")
+ console.log(
+ "Failed to load HTMl to render notifications item. Error: "
+ + xhr.status
+ + ": "
+ + xhr.statusText
+ );
+ });
+ }
+ render_notifications()
+
+ // re-render notifications every x seconds
+ setInterval(render_notifications, 5000);
+});
diff --git a/allianceauth/templates/allianceauth/base.html b/allianceauth/templates/allianceauth/base.html
index ee7db14d..2a9b1633 100644
--- a/allianceauth/templates/allianceauth/base.html
+++ b/allianceauth/templates/allianceauth/base.html
@@ -45,6 +45,7 @@
{% endif %}
{% include 'bundles/bootstrap-js.html' %}
{% block extra_javascript %}
+
{% endblock extra_javascript %}