2018-02-18 18:12:17 +00:00
/ * *
* Notifications menu bar dropdown
*
* @ author Pierre HUBERT
* /
ComunicWeb . components . notifications . dropdown = {
2018-02-21 15:27:10 +00:00
/ * *
* Display new data dropdowns
*
* @ param { HTMLElement } target The target for the notification area
* /
display : function ( target ) {
//Display the number of notifications
var notifs _number _elem = this . display _notifications _dropdown ( target ) ;
2018-02-21 15:37:02 +00:00
//Display the number of unread conversations
2018-02-24 13:03:20 +00:00
var conversations _number _elem = ComunicWeb . components . conversations . unreadDropdown . display _dropdown ( target ) ;
2018-02-21 15:37:02 +00:00
2018-02-21 15:27:10 +00:00
//Initialize service
2018-02-21 15:37:02 +00:00
ComunicWeb . components . notifications . service . init ( notifs _number _elem , true , conversations _number _elem ) ;
2018-02-21 15:27:10 +00:00
} ,
2018-02-18 18:12:17 +00:00
/ * *
* Display notifications dropdown
*
* @ param { HTMLElement } target The target of the notification dropdown
2018-02-21 15:27:10 +00:00
* @ return { HTMLElement } The HTML element that contains the number of unread notifications
2018-02-18 18:12:17 +00:00
* /
2018-02-21 15:27:10 +00:00
display _notifications _dropdown : function ( target ) {
2018-02-18 18:12:17 +00:00
//Create the button
var dropdown = createElem2 ( {
appendTo : target ,
type : "li" ,
2018-02-19 14:58:33 +00:00
class : "dropdown messages-menu"
2018-02-18 18:12:17 +00:00
} ) ;
//Add dropdown toggle
var dropdownToggle = createElem2 ( {
appendTo : dropdown ,
type : "a" ,
class : "dropdown-toggle" ,
href : "#" ,
innerHTML : '<i class="fa fa-bell-o"></i>'
} ) ;
2018-02-18 18:16:48 +00:00
dropdownToggle . setAttribute ( "data-toggle" , "dropdown" ) ;
2018-02-18 18:12:17 +00:00
//Add notification number
var notificationsNumber = createElem2 ( {
appendTo : dropdownToggle ,
type : "span" ,
class : "label label-danger" ,
innerHTML : "0"
} ) ;
//Add dropdown menu
2018-02-18 18:16:48 +00:00
var dropdownMenu = createElem2 ( {
appendTo : dropdown ,
type : "ul" ,
class : "dropdown-menu"
} ) ;
//Add dropdown header
var dropdownHeader = createElem2 ( {
appendTo : dropdownMenu ,
type : "li" ,
class : "header" ,
innerHTML : "Notifications"
} ) ;
2018-02-18 18:12:17 +00:00
2018-02-19 08:46:51 +00:00
//Add notifications list
2018-03-25 07:43:39 +00:00
var notificationsListContainer = createElem2 ( {
2018-02-19 08:46:51 +00:00
appendTo : dropdownMenu ,
2018-02-19 14:58:33 +00:00
type : "li"
} ) ;
var notificationsList = createElem2 ( {
2018-03-25 07:43:39 +00:00
appendTo : notificationsListContainer ,
2018-02-19 08:46:51 +00:00
type : "ul" ,
class : "menu"
} ) ;
2018-02-20 13:55:55 +00:00
//Add dropdown bottom
var dropdownBottom = createElem2 ( {
appendTo : dropdownMenu ,
type : "li" ,
class : "footer"
} ) ;
//Add a button to offer the user to delete all his notifications
var deleteAllLink = createElem2 ( {
appendTo : dropdownBottom ,
type : "a" ,
innerHTML : "Delete all"
} ) ;
//Make the delete all notifications link lives
deleteAllLink . onclick = function ( ) {
ComunicWeb . common . messages . confirm ( "Are you sure do you want to delete all the notifications ? This operation can not be cancelled !" , function ( accept ) {
//We continue only if the user confirmed the operation
if ( ! accept )
return ;
//Perform a request to the server through the interface
ComunicWeb . components . notifications . interface . delete _all ( function ( result ) {
//Check for errors
if ( result . error ) {
ComunicWeb . common . notificationSystem . showNotification ( "An error occured while trying to delete all the notifications !" , "danger" ) ;
return ;
}
//Display success
ComunicWeb . common . notificationSystem . showNotification ( "The entire list of notification has been cleared." , "success" ) ;
} ) ;
} ) ;
} ;
2018-02-19 08:46:51 +00:00
//Enable slimscroll
$ ( notificationsList ) . slimScroll ( {
height : '100%'
} ) ;
//Refresh the notifications list if the user click the dropdown button
dropdownToggle . onclick = function ( ) {
2018-02-21 15:27:10 +00:00
ComunicWeb . components . notifications . dropdown . refresh _list _notifications ( notificationsList ) ;
2018-02-19 08:46:51 +00:00
}
2018-02-21 15:27:10 +00:00
//Return the number of notifications target
return notificationsNumber ;
2018-02-18 18:12:17 +00:00
} ,
2018-02-19 08:46:51 +00:00
/ * *
* Refresh the list of notifications
*
* @ param { HTMLElement } list The notifications list to refresh
* /
2018-02-21 15:27:10 +00:00
refresh _list _notifications : function ( list ) {
2018-02-19 08:46:51 +00:00
2018-02-19 13:09:15 +00:00
//Perform a request on the API
ComunicWeb . components . notifications . interface . get _list _unread ( function ( result ) {
//Check for errors
if ( result . error ) {
ComunicWeb . common . notificationSystem . showNotification ( "An error occured while trying to retrieve notifications list !" , "danger" ) ;
return ;
}
2018-02-19 14:58:33 +00:00
//Get the list of required users informations
var users _id = ComunicWeb . components . notifications . utils . get _users _id ( result ) ;
//Get informations about the users
ComunicWeb . user . userInfos . getMultipleUsersInfos ( users _id , function ( users ) {
//Check for errors
if ( users . error ) {
ComunicWeb . common . notificationSystem . showNotification ( "An error occured while trying to retrieve users informations for the notifications !" , "danger" ) ;
return ;
}
//Empty the target list
list . innerHTML = "" ;
//Process the list of notifications
for ( let i = 0 ; i < result . length ; i ++ ) {
const notification = result [ i ] ;
//Display the notification
ComunicWeb . components . notifications . ui . display _notification ( notification , list , users ) ;
}
2018-02-20 13:55:55 +00:00
//Display a message if there isn't any notification to display
if ( result . length == 0 ) {
list . innerHTML = "<li class='no-notification-msg'>You do not have any notification yet.</li>" ;
}
2018-02-19 14:58:33 +00:00
} , false ) ;
2018-02-19 13:09:15 +00:00
} ) ;
2018-02-19 08:46:51 +00:00
2018-02-24 13:03:20 +00:00
}
2018-02-18 18:12:17 +00:00
}