- Added trans() / _() translations to models, forms and templates. - Updated Spanish locale (django.po). - Fixed missing verbose_name translations. Known issues: - "Leave Type" label in horilla/leave/forms.py not translating. - "Performance" and "Mails automations" still pending.
105 lines
3.3 KiB
HTML
105 lines
3.3 KiB
HTML
{% load basefilters %} {% load static %} {% load i18n %}
|
|
{% load notifications_tags %} {% notifications_unread as unread_count %}
|
|
|
|
<div
|
|
class="oh-navbar__notifications"
|
|
id="notificationIcon"
|
|
x-data="{open: false}"
|
|
hx-get="{% url 'notifications' %}"
|
|
hx-target="#notificationContainer"
|
|
>
|
|
<a
|
|
href="#"
|
|
class="oh-navbar__notification-link"
|
|
@click="open = !open"
|
|
title="{% trans 'Notifications' %}"
|
|
>
|
|
<ion-icon
|
|
name="notifications-outline"
|
|
class="oh-navbar__icon"
|
|
></ion-icon>
|
|
<span class="oh-navbar__notification-beacon">
|
|
{% live_notify_badge %}
|
|
</span>
|
|
</a>
|
|
|
|
<div
|
|
id="showallnotificationbtn"
|
|
class="oh-navbar__notification-tray"
|
|
x-data="{markRead: false, visible: true}"
|
|
x-show="open"
|
|
style="display: none"
|
|
@click.outside="open = false"
|
|
>
|
|
<div id="notificationContainer">
|
|
{% include 'notification/notification_items.html' %}
|
|
</div>
|
|
<div class="oh-navbar__notification-empty" x-show="!visible">
|
|
<img
|
|
src="{% static 'images/ui/happy.svg' %}"
|
|
alt="All caught up"
|
|
width="50"
|
|
height="50"
|
|
loading="lazy"
|
|
/>
|
|
<span class="oh-navbar__notification-empty-title"
|
|
>{% trans "All caught up!" %}</span
|
|
>
|
|
<span class="oh-navbar__notification-empty-desc"
|
|
>{% trans "You have no new notifications at the moment." %}</span
|
|
>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
var staticUrl = $("#statiUrl").attr("data-url");
|
|
var notification_sound = {{request.user.employee_get.notification_sound.sound_enabled|yesno:"true,false"}};
|
|
function fill_notification_badge(data) {
|
|
var badges = document.getElementsByClassName(notify_badge_class);
|
|
let previousUnreadCount = parseInt(localStorage.getItem('previousUnreadCount')) || 0;
|
|
if (notification_sound) {
|
|
if (
|
|
previousUnreadCount !== null &&
|
|
previousUnreadCount < data.unread_count
|
|
) {
|
|
const audio = new Audio(
|
|
`${staticUrl}static/audio/notification-sound.wav`
|
|
);
|
|
audio.play();
|
|
}
|
|
}
|
|
|
|
if (badges) {
|
|
for (var i = 0; i < badges.length; i++) {
|
|
badges[i].innerHTML = data.unread_count;
|
|
}
|
|
}
|
|
localStorage.setItem('previousUnreadCount', data.unread_count);
|
|
}
|
|
|
|
</script>
|
|
<script
|
|
src="{% static 'notifications/notify.js' %}"
|
|
type="text/javascript"
|
|
></script>
|
|
{% register_notify_callbacks callbacks='fill_notification_list,fill_notification_badge' %}
|
|
<script>
|
|
function markAsRead(notificationId) {
|
|
fetch("/notifications/mark-as-read/" + notificationId + "/").then(
|
|
(response) => {
|
|
if (response.ok) {
|
|
// Reload the page to update the notifications
|
|
location.reload();
|
|
} else {
|
|
console.error("Failed to mark notification as read");
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
$("#viewallnotification").click(function () {
|
|
$("#showallnotificationbtn").toggle();
|
|
});
|
|
</script>
|