diff --git a/resources/assets/js/components/notifications.js b/resources/assets/js/components/notifications.js new file mode 100644 index 000000000..3cf409259 --- /dev/null +++ b/resources/assets/js/components/notifications.js @@ -0,0 +1,73 @@ +$(document).ready(function() { + +$('.nav-link.nav-notification').on('click', function(e) { + e.preventDefault(); + let el = $(this); + let container = $('.navbar .nav-notification-dropdown'); + if(pixelfed.notifications) { + return; + } + axios.get('/api/v2/notifications') + .then((res) => { + $('.nav-notification-dropdown .loader').hide(); + let data = res.data; + data.forEach(function(v, k) { + let action = v.action; + let notification = $('
  • ').addClass('dropdown-item py-3') + .attr('style', 'border-bottom: 1px solid #ccc') + switch(action) { + case 'comment': + let avatar = $('') + .attr('class', 'notification-icon pr-3'); + let avatarImg = $('') + .attr('width', '32px') + .attr('height', '32px') + .attr('class', 'rounded-circle') + .attr('style', 'border: 1px solid #ccc') + .attr('src', v.actor.avatar); + avatar = avatar.append(avatarImg); + + let text = $('') + .attr('href', v.url) + .attr('class', 'font-weight-bold') + .html(v.rendered); + + notification.append(avatar); + notification.append(text); + container.append(notification); + break; + + case 'follow': + avatar = $('') + .attr('class', 'notification-icon pr-3'); + avatarImg = $('') + .attr('width', '32px') + .attr('height', '32px') + .attr('class', 'rounded-circle') + .attr('style', 'border: 1px solid #ccc') + .attr('src', v.actor.avatar); + avatar = avatar.append(avatarImg); + + text = $('') + .attr('href', v.url) + .attr('class', 'font-weight-bold') + .html(v.rendered); + + notification.append(avatar); + notification.append(text); + container.append(notification); + break; + } + }); + let all = $('') + .attr('class', 'dropdown-item py-3 text-center text-primary font-weight-bold') + .attr('href', '/account/activity') + .text('View all notifications'); + container.append(all); + pixelfed.notifications = true; + }).catch((err) => { + $('.nav-notification-dropdown .loader').addClass('font-weight-bold').text('Something went wrong. Please try again later.'); + }); +}); + +}); \ No newline at end of file