mirror of
https://github.com/pierre42100/ComunicWeb
synced 2024-11-23 04:29:21 +00:00
369 lines
8.9 KiB
JavaScript
369 lines
8.9 KiB
JavaScript
/**
|
|
* Menubar for authenticated users complements
|
|
*
|
|
* @author Pierre HUBERT
|
|
*/
|
|
|
|
ComunicWeb.components.menuBar.authenticated = {
|
|
|
|
/**
|
|
* Dropdown menu links list
|
|
*/
|
|
dropdownMenuLinksList: [
|
|
|
|
//Conversations
|
|
{
|
|
innerLang: "menu_bar_action_conversations",
|
|
targetPage: "conversations",
|
|
icon: "fa-comments-o"
|
|
},
|
|
|
|
//Groups list
|
|
{
|
|
innerLang: "menu_bar_action_groups",
|
|
targetPage: "groups",
|
|
icon: "fa-group"
|
|
},
|
|
|
|
//Dark theme
|
|
{
|
|
innerLang: "menu_bar_action_dark_theme",
|
|
onclick: function(b){ComunicWeb.components.menuBar.authenticated.darkThemeButtonClicked(true, b)},
|
|
oninit: function(b){ComunicWeb.components.menuBar.authenticated.darkThemeButtonClicked(false, b)},
|
|
icon: "fa-sun-o"
|
|
},
|
|
|
|
//Settings list
|
|
{
|
|
innerLang: "menu_bar_action_settings",
|
|
targetPage: "settings",
|
|
icon: "fa-gear"
|
|
},
|
|
|
|
//Logout link
|
|
{
|
|
innerLang: "_menu_bar_action_logout",
|
|
targetPage: "logout",
|
|
icon: "fa-sign-out"
|
|
}
|
|
|
|
],
|
|
|
|
/**
|
|
* Add authenticated user specific elements
|
|
*
|
|
* @param {HTMLElement} container The container element of the Menubar
|
|
*/
|
|
addElements: function(container){
|
|
|
|
// Site logo
|
|
createElem2({
|
|
appendTo: container,
|
|
type: "a",
|
|
class: "logo",
|
|
internalHref: "#",
|
|
innerHTML: "<span class='logo-mini'>C</span><span class='logo-lg'>Comunic</span>"
|
|
});
|
|
|
|
// Navbar
|
|
var navBar = createElem2({
|
|
appendTo: container,
|
|
type: "nav",
|
|
class: "navbar navbar-static-top"
|
|
});
|
|
|
|
// Sidebar toggle
|
|
createElem2({
|
|
appendTo: navBar,
|
|
type: "a",
|
|
class: "sidebar-toggle",
|
|
href: "#",
|
|
}).setAttribute("data-toggle", "offcanvas");
|
|
|
|
//Create an auto-collapsed element
|
|
var navbarCollapse = createElem("div", navBar);
|
|
navbarCollapse.id = "navbar-collapse";
|
|
navbarCollapse.className = "navbar-collapse pull-left collapse";
|
|
|
|
//Create navbar elements list
|
|
var navbarCollapseElemList = createElem("ul", navbarCollapse);
|
|
navbarCollapseElemList.className = "nav navbar-nav";
|
|
|
|
//Add search form
|
|
//this.addSearchForm(navbarCollapseElemList);
|
|
|
|
//Navbar right elements
|
|
var navbarRight = createElem("div", navBar);
|
|
navbarRight.className = "navbar-custom-menu";
|
|
var navbarRightElemList = createElem("ul", navbarRight);
|
|
navbarRightElemList.className = "nav navbar-nav";
|
|
|
|
//Add user name
|
|
//this.addUserName(navbarRightElemList);
|
|
|
|
//Alternate latest posts button
|
|
this.addAlternateLatestPostsButton(navbarRightElemList);
|
|
|
|
//Add friends list button
|
|
//this.addFriendListButton(navbarRightElemList);
|
|
|
|
//Add notifications dropdown
|
|
ComunicWeb.components.notifications.dropdown.display(navbarRightElemList);
|
|
|
|
//Add dropdown menu
|
|
this.addDropdown(navbarRightElemList);
|
|
|
|
},
|
|
|
|
/**
|
|
* Add dropdown menu
|
|
*
|
|
* @param {HTMLElement} navbarElem The target navbarlist element
|
|
* @return {HTMLElement} The dropdown content element
|
|
*/
|
|
addDropdown: function(navbarElem){
|
|
//Create dropdown menu
|
|
var dropdown = createElem("li", navbarElem);
|
|
dropdown.className = "dropdown dropdown-user-menu-action";
|
|
|
|
//Add dropdown button
|
|
var dropdownButton = createElem("a", dropdown);
|
|
dropdownButton.className = "dropdown-toggle";
|
|
dropdownButton.setAttribute("data-toggle", "dropdown");
|
|
|
|
//Add dropdown button icon
|
|
var dropdownButtonIcon = createElem("i", dropdownButton);
|
|
dropdownButtonIcon.className = "fa fa-gear";
|
|
|
|
//Add space
|
|
dropdownButton.innerHTML += " ";
|
|
|
|
//Add dropdown button arrow
|
|
var dropdownButtonArrow = createElem("span", dropdownButton);
|
|
dropdownButtonArrow.className = "caret";
|
|
|
|
//Create dropdown menu content
|
|
var dropdownContent = createElem("ul", dropdown);
|
|
dropdownContent.className = "dropdown-menu"
|
|
dropdownContent.setAttribute("role", "menu");
|
|
|
|
|
|
//Process links list
|
|
var addMenuOption = function(entry){
|
|
|
|
var linkButton = createElem2({
|
|
appendTo: dropdownContent,
|
|
type: "li"
|
|
});
|
|
|
|
var link = createElem2({
|
|
appendTo: linkButton,
|
|
type: "a",
|
|
href: entry.href,
|
|
innerLang: entry.innerLang,
|
|
innerHTML: entry.innerHTML,
|
|
innerHTMLprefix: entry.icon ? "<i class='fa " + entry.icon + "'></i> " : undefined,
|
|
});
|
|
|
|
|
|
if(entry.targetPage){
|
|
linkButton.onclick = function(){
|
|
openPage(entry.targetPage);
|
|
};
|
|
}
|
|
|
|
if(entry.target)
|
|
link.setAttribute("target", entry.target);
|
|
|
|
if(entry.onclick){
|
|
linkButton.addEventListener("click", function(){
|
|
entry.onclick(link);
|
|
});
|
|
}
|
|
|
|
if(entry.oninit){
|
|
entry.oninit(link);
|
|
}
|
|
|
|
|
|
};
|
|
|
|
this.dropdownMenuLinksList.forEach(addMenuOption);
|
|
|
|
//Add divider
|
|
createElem2({
|
|
appendTo: dropdownContent,
|
|
type: "li",
|
|
class: "divider"
|
|
});
|
|
|
|
ComunicWeb.components.bottom.links.forEach(addMenuOption);
|
|
|
|
|
|
//Return dropdown content element
|
|
return dropdownContent;
|
|
},
|
|
|
|
/**
|
|
* Called this method each time the dark theme button
|
|
* is clicked
|
|
*
|
|
* @param {Boolean} invert Specify whether dark theme mode should
|
|
* be inverted or not
|
|
* @param {HTMLElement} button Button element that has been
|
|
* clicked
|
|
*/
|
|
darkThemeButtonClicked: function(invert, button){
|
|
|
|
if(invert)
|
|
ComunicWeb.components.darkTheme.setEnabled(!ComunicWeb.components.darkTheme.isEnabled());
|
|
|
|
//Update icon
|
|
button.getElementsByTagName("i")[0].className =
|
|
"fa " + (ComunicWeb.components.darkTheme.isEnabled() ? "fa-moon-o" : "fa-sun-o");
|
|
|
|
},
|
|
|
|
/**
|
|
* Add alternate latest posts button
|
|
* (if the screen is too small to display "Comunic")
|
|
*
|
|
* @param {HTMLElement} target The target for the button
|
|
*/
|
|
addAlternateLatestPostsButton: function(target){
|
|
//Create button
|
|
var button = createElem2({
|
|
type: "li",
|
|
appendTo: target,
|
|
class: "alternate-latest-posts-button"
|
|
});
|
|
|
|
//Create link
|
|
var link = createElem("a", button);
|
|
createElem2({
|
|
type: "i",
|
|
appendTo: link,
|
|
class: "fa fa-history"
|
|
});
|
|
|
|
//Makes link lives
|
|
link.addEventListener("click", function(){
|
|
openPage("latest");
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Add friendsList toggle button
|
|
*
|
|
* @param {HTMLElement} navbarElem The target navbarlist element
|
|
* @return {HTMLElement} The button element
|
|
*/
|
|
addFriendListButton: function(navbarElem){
|
|
//Create button
|
|
var friendButton = createElem("li", navbarElem);
|
|
friendButton.className = "friendToggleButton";
|
|
|
|
//Create link
|
|
var friendButtonLink = createElem("a", friendButton);
|
|
var friendIcon = createElem("i", friendButtonLink);
|
|
friendIcon.className = "fa fa-users";
|
|
|
|
//Makes link live
|
|
friendButtonLink.onclick = function(){
|
|
ComunicWeb.components.friends.bar.toggleShowHide();
|
|
};
|
|
|
|
return friendButtonLink;
|
|
},
|
|
|
|
/**
|
|
* Add user name element
|
|
*
|
|
* @param {HTMLElement} navbarElem The target navbarlist element
|
|
* @return {HTMLElement} The user element
|
|
*/
|
|
addUserName: function(navbarElem){
|
|
//Create user element
|
|
var userelement = createElem("li", navbarElem);
|
|
userelement.className = "user-menu";
|
|
|
|
//Add user link element
|
|
var userlinkelement = createElem("a", userelement);
|
|
|
|
//Add user image
|
|
var userimage = createElem("img", userlinkelement);
|
|
userimage.className = "user-image";
|
|
userimage.src = ComunicWeb.__config.assetsURL + "img/defaultAvatar.png";
|
|
|
|
//Add user name
|
|
var userNameElem = createElem("span", userlinkelement);
|
|
userNameElem.className = "hidden-xs";
|
|
userNameElem.innerHTML = lang("_loading");
|
|
|
|
//Make a request to get informations about the user
|
|
ComunicWeb.user.userInfos.getUserInfos("current", (function(userInfos){
|
|
|
|
//Change user name
|
|
userNameElem.innerHTML = userInfos.firstName + " "+ userInfos.lastName;
|
|
|
|
//Change avatar url
|
|
userimage.src = userInfos.accountImage;
|
|
|
|
userlinkelement.onclick = function(){
|
|
openUserPage(userInfos);
|
|
}
|
|
|
|
}), true);
|
|
},
|
|
|
|
/**
|
|
* Add search form element
|
|
*
|
|
* @param {HTMLElement} navbarElem The target navbarlist element
|
|
* @return {HTMLElement} The user element
|
|
*/
|
|
addSearchForm: function(navbarElem){
|
|
|
|
//Create form element (large screens)
|
|
var searchForm = createElem("li", navbarElem);
|
|
searchForm.className = "dropdown navbar-form navbar-left messages-menu hidden-xs";
|
|
searchForm.setAttribute("role", "search");
|
|
|
|
//Create form group
|
|
var formGroup = createElem("div", searchForm);
|
|
formGroup.className = "form-group";
|
|
|
|
//Create search input
|
|
var searchInput = createElem("input", formGroup);
|
|
searchInput.className = "form-control";
|
|
searchInput.placeholder = lang("_menu_bar_search_placeholder");
|
|
searchInput.type = "text";
|
|
searchInput.id = "navbar-search-input";
|
|
|
|
//Create dropdown container
|
|
var dropdownContainer = createElem("ul", searchForm);
|
|
dropdownContainer.className = "dropdown-menu";
|
|
|
|
//Initializate menu
|
|
ComunicWeb.components.search.form.init(searchInput, dropdownContainer);
|
|
|
|
//Create search link (small screen)
|
|
var searchLinkLi = createElem2({
|
|
appendTo: navbarElem,
|
|
type: "li",
|
|
class: "navbar-left visible-xs"
|
|
});
|
|
|
|
var searchLink = createElem2({
|
|
appendTo: searchLinkLi,
|
|
type: "a",
|
|
innerHTML: "Search"
|
|
});
|
|
|
|
searchLink.addEventListener("click", function(){
|
|
openPage("search");
|
|
$(navbarElem.parentNode).collapse("toggle");
|
|
});
|
|
|
|
}
|
|
}; |