mirror of
				https://github.com/pierre42100/ComunicWeb
				synced 2025-11-04 04:04:20 +00:00 
			
		
		
		
	Display friends and groups
This commit is contained in:
		
							
								
								
									
										11
									
								
								assets/css/components/sidebar.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								assets/css/components/sidebar.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Sidebar stylesheet
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Pierre HUBERT
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.sidebar-menu.memberships-list img {
 | 
				
			||||||
 | 
						width: 20px;
 | 
				
			||||||
 | 
						margin-right: 10px;
 | 
				
			||||||
 | 
						margin-left: -4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										3
									
								
								assets/custom_ts/Utils.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								assets/custom_ts/Utils.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -14,6 +14,7 @@ declare interface CreateElem2Args {
 | 
				
			|||||||
	title ?: string,
 | 
						title ?: string,
 | 
				
			||||||
	src ?: string,
 | 
						src ?: string,
 | 
				
			||||||
	href ?: string,
 | 
						href ?: string,
 | 
				
			||||||
 | 
						internalHref ?: string,
 | 
				
			||||||
	name ?: string,
 | 
						name ?: string,
 | 
				
			||||||
	elemType ?: string,
 | 
						elemType ?: string,
 | 
				
			||||||
	value ?: string,
 | 
						value ?: string,
 | 
				
			||||||
@@ -22,6 +23,8 @@ declare interface CreateElem2Args {
 | 
				
			|||||||
	innerLang ?: string,
 | 
						innerLang ?: string,
 | 
				
			||||||
	innerHTMLprefix ?: string,
 | 
						innerHTMLprefix ?: string,
 | 
				
			||||||
	disabled ?: boolean,
 | 
						disabled ?: boolean,
 | 
				
			||||||
 | 
						children ?: HTMLElement[],
 | 
				
			||||||
 | 
						onclick ?: Function
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
declare function createElem(nodeType : string, appendTo : string) : HTMLElement;
 | 
					declare function createElem(nodeType : string, appendTo : string) : HTMLElement;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1217,6 +1217,20 @@ var ComunicWeb = {
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Web application interface
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							webApp: {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								/**
 | 
				
			||||||
 | 
								 * Web app interface
 | 
				
			||||||
 | 
								 */
 | 
				
			||||||
 | 
								interface: {
 | 
				
			||||||
 | 
									//TODO : implement
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/**
 | 
							/**
 | 
				
			||||||
		 * Easter egg : pacman
 | 
							 * Easter egg : pacman
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -236,7 +236,7 @@ ComunicWeb.common.page = {
 | 
				
			|||||||
                var pageTarget = createElem("div", mainContainerElem);
 | 
					                var pageTarget = createElem("div", mainContainerElem);
 | 
				
			||||||
                pageTarget.id = "pageTarget";
 | 
					                pageTarget.id = "pageTarget";
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else{
 | 
					            else {
 | 
				
			||||||
                //We can empty page target (much faster)
 | 
					                //We can empty page target (much faster)
 | 
				
			||||||
                pageTarget.innerHTML = "";
 | 
					                pageTarget.innerHTML = "";
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,6 +44,7 @@ function createElem(nodeType, appendTo){
 | 
				
			|||||||
 * @info {String} innerHTMLprefix Specify prefix to add at the begining of the content of the element
 | 
					 * @info {String} innerHTMLprefix Specify prefix to add at the begining of the content of the element
 | 
				
			||||||
 * @info {boolean} disabled Set whether the field should be disabled or not (input only)
 | 
					 * @info {boolean} disabled Set whether the field should be disabled or not (input only)
 | 
				
			||||||
 * @info {HTMLElement[]} children Children for the new object
 | 
					 * @info {HTMLElement[]} children Children for the new object
 | 
				
			||||||
 | 
					 * @info {Function} onclick
 | 
				
			||||||
 * @return {HTMLElement} The newly created element
 | 
					 * @return {HTMLElement} The newly created element
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
function createElem2(infos){
 | 
					function createElem2(infos){
 | 
				
			||||||
@@ -129,6 +130,9 @@ function createElem2(infos){
 | 
				
			|||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(infos.onclick)
 | 
				
			||||||
 | 
							newElem.addEventListener("click", infos.onclick);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//Return newly created element
 | 
						//Return newly created element
 | 
				
			||||||
	return newElem;
 | 
						return newElem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,8 @@ ComunicWeb.components.sideBar.main = {
 | 
				
			|||||||
		var sideBar = createElem2({
 | 
							var sideBar = createElem2({
 | 
				
			||||||
			appendTo: byId("wrapper"),
 | 
								appendTo: byId("wrapper"),
 | 
				
			||||||
			type: "aside",
 | 
								type: "aside",
 | 
				
			||||||
			class: "main-sidebar"
 | 
								class: "main-sidebar",
 | 
				
			||||||
 | 
								id: "main-sidebar",
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var section = createElem2({
 | 
							var section = createElem2({
 | 
				
			||||||
@@ -36,7 +37,7 @@ ComunicWeb.components.sideBar.main = {
 | 
				
			|||||||
				appendTo: userPanel,
 | 
									appendTo: userPanel,
 | 
				
			||||||
				type: "div",
 | 
									type: "div",
 | 
				
			||||||
				class: "pull-left image cursor-pointer",
 | 
									class: "pull-left image cursor-pointer",
 | 
				
			||||||
				internalHref: userIDorPath(info),
 | 
									onclick: () => openUserPage(info),
 | 
				
			||||||
				children: [
 | 
									children: [
 | 
				
			||||||
					createElem2({
 | 
										createElem2({
 | 
				
			||||||
						type: "img",
 | 
											type: "img",
 | 
				
			||||||
@@ -56,7 +57,7 @@ ComunicWeb.components.sideBar.main = {
 | 
				
			|||||||
						type: "p",
 | 
											type: "p",
 | 
				
			||||||
						class: "cursor-pointer",
 | 
											class: "cursor-pointer",
 | 
				
			||||||
						innerHTML: userFullName(info),
 | 
											innerHTML: userFullName(info),
 | 
				
			||||||
						internalHref: userIDorPath(info),
 | 
											onclick: () => userIDorPath(info),
 | 
				
			||||||
					}),
 | 
										}),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					createElem2({
 | 
										createElem2({
 | 
				
			||||||
@@ -102,5 +103,126 @@ ComunicWeb.components.sideBar.main = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			openPage("search?q=" + searchForm.getElementsByTagName("input")[0].value);
 | 
								openPage("search?q=" + searchForm.getElementsByTagName("input")[0].value);
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// User memberships
 | 
				
			||||||
 | 
							let userMemberships = createElem2({
 | 
				
			||||||
 | 
								appendTo: section,
 | 
				
			||||||
 | 
								type: "ul",
 | 
				
			||||||
 | 
								class: "sidebar-menu memberships-list" 
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							this.refreshMemberships(userMemberships);
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Refresh user memberships
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {HTMLElement} target 
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						refreshMemberships: function(target){
 | 
				
			||||||
 | 
							ComunicWeb.components.webApp.interface.getMemberships(
 | 
				
			||||||
 | 
								() => notify("Could not refresh your memberships!", "error"), 
 | 
				
			||||||
 | 
								(m, u, g) => this.applyMemberships(target, m, u, g)
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Apply memberships
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {HTMLElement} target
 | 
				
			||||||
 | 
						 * @param {*} memberships 
 | 
				
			||||||
 | 
						 * @param {*} users 
 | 
				
			||||||
 | 
						 * @param {*} groups 
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						applyMemberships: function(target, memberships, users, groups) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Empty liste
 | 
				
			||||||
 | 
							target.innerHTML = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							memberships.forEach(e => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if(e.type == "friend")
 | 
				
			||||||
 | 
									this.applyFriend(target, e.friend, users["user-"+e.friend.ID_friend]);
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if(e.type == "group")
 | 
				
			||||||
 | 
									this.applyGroup(target, groups[e.id], e.last_activity);
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Apply a friend object
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {HTMLElement} target 
 | 
				
			||||||
 | 
						 * @param {*} friend 
 | 
				
			||||||
 | 
						 * @param {*} user 
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						applyFriend: function(target, friend, user) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							let li = createElem2({
 | 
				
			||||||
 | 
								appendTo: target,
 | 
				
			||||||
 | 
								type: "li"
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							let a = createElem2({
 | 
				
			||||||
 | 
								appendTo: li,
 | 
				
			||||||
 | 
								onclick: () => openUserPage(user),
 | 
				
			||||||
 | 
								type: "a"
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// User icon
 | 
				
			||||||
 | 
							createElem2({
 | 
				
			||||||
 | 
								appendTo: a,
 | 
				
			||||||
 | 
								type: "img",
 | 
				
			||||||
 | 
								class: "img-circle",
 | 
				
			||||||
 | 
								src: user.accountImage
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// User name
 | 
				
			||||||
 | 
							createElem2({
 | 
				
			||||||
 | 
								appendTo: a,
 | 
				
			||||||
 | 
								type: "span",
 | 
				
			||||||
 | 
								innerHTML: userFullName(user)
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Apply group information
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {HTMLElement} target 
 | 
				
			||||||
 | 
						 * @param {*} group 
 | 
				
			||||||
 | 
						 * @param {*} lastactive 
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						applyGroup: function(target, group, lastactive) {
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							let li = createElem2({
 | 
				
			||||||
 | 
								appendTo: target,
 | 
				
			||||||
 | 
								type: "li"
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							let a = createElem2({
 | 
				
			||||||
 | 
								appendTo: li,
 | 
				
			||||||
 | 
								type: "a",
 | 
				
			||||||
 | 
								onclick: () => openGroupPage(group)
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Group icon
 | 
				
			||||||
 | 
							createElem2({
 | 
				
			||||||
 | 
								appendTo: a,
 | 
				
			||||||
 | 
								type: "img",
 | 
				
			||||||
 | 
								src: group.icon_url
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Group name
 | 
				
			||||||
 | 
							createElem2({
 | 
				
			||||||
 | 
								appendTo: a,
 | 
				
			||||||
 | 
								type: "span",
 | 
				
			||||||
 | 
								innerHTML: group.name
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										56
									
								
								assets/js/components/webApp/interface.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								assets/js/components/webApp/interface.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Web application interface
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author Pierre HUBERT
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ComunicWeb.components.webApp.interface = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Get all the membership of the user
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {Function} err Function called in case of errors
 | 
				
			||||||
 | 
						 * @param {Function(memberships, usersInfo, groupsInfo) : void} success Function called in case of success
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						getMemberships: function(err, success) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Peform the request on the server
 | 
				
			||||||
 | 
							ComunicWeb.common.api.makeAPIrequest(
 | 
				
			||||||
 | 
								"webApp/getMemberships", 
 | 
				
			||||||
 | 
								{}, 
 | 
				
			||||||
 | 
								true,
 | 
				
			||||||
 | 
								memberships => {
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									// Check for error
 | 
				
			||||||
 | 
									if(memberships.error)
 | 
				
			||||||
 | 
										return err(memberships.error);
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									// Get users & groups ID in case of success
 | 
				
			||||||
 | 
									let usersID = [];
 | 
				
			||||||
 | 
									let groupsID = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									memberships.forEach(el => {
 | 
				
			||||||
 | 
										if(el.type == "friend")
 | 
				
			||||||
 | 
											usersID.push(el.friend.ID_friend);
 | 
				
			||||||
 | 
										else
 | 
				
			||||||
 | 
											groupsID.push(el.id);
 | 
				
			||||||
 | 
									});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									getMultipleUsersInfo(usersID, users => {
 | 
				
			||||||
 | 
										if(users.error)
 | 
				
			||||||
 | 
											return err(memberships.error);
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										getInfoMultipleGroups(groupsID, groupsInfo => {
 | 
				
			||||||
 | 
											if(groupsInfo.error)
 | 
				
			||||||
 | 
												return err(groupsInfo.error);
 | 
				
			||||||
 | 
											
 | 
				
			||||||
 | 
											success(memberships, users, groupsInfo);
 | 
				
			||||||
 | 
										});
 | 
				
			||||||
 | 
									});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -226,6 +226,9 @@ class Dev {
 | 
				
			|||||||
			"css/components/calls/callWindow.css",
 | 
								"css/components/calls/callWindow.css",
 | 
				
			||||||
			"css/components/calls/ringScreen.css",
 | 
								"css/components/calls/ringScreen.css",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								//Sidebar component
 | 
				
			||||||
 | 
								"css/components/sidebar.css",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//Pacman (easter egg) stylesheet
 | 
								//Pacman (easter egg) stylesheet
 | 
				
			||||||
			"css/components/pacman.css",
 | 
								"css/components/pacman.css",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -458,6 +461,9 @@ class Dev {
 | 
				
			|||||||
			"js/components/calls/ringScreen.js",
 | 
								"js/components/calls/ringScreen.js",
 | 
				
			||||||
			"js/components/calls/utils.js",
 | 
								"js/components/calls/utils.js",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Web app component
 | 
				
			||||||
 | 
								"js/components/webApp/interface.js",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//Pacman component (easter egg)
 | 
								//Pacman component (easter egg)
 | 
				
			||||||
			"js/components/pacman.js",
 | 
								"js/components/pacman.js",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user