/** * 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: "CComunic" }); // 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 ? " " : 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"); }); } };