PageSourceSearch

https://www.communecter.org/assets/7b795b51/js/directory/directorySocket.js?v=1790224428379

js communecter.org collected 2026-09-24 09:23:04 UTC 30,947 bytes, 594 lines download raw bytes

1var directorySocket = {
2    init: function() {
3        if(currentUser){
4            directorySocket.emitEvent(wsCO, "join_room", {userId: userId, userName: currentUser.name});
5        }
6        if(wsCO){
7            wsCO.on("join_user", function(data){
8                // pageProfil.init();
9				if(pageProfil.params.view == "conode"){
10					window[`communityGraph${contextData.id}`].addChild(data.collection, {
11						id: data._id.$id,
12						name: data.name,
13						bread: data.name,
14						group: data.collection,
15						profil: typeof data.profilThumbImageUrl != "undefined" ? data.profilThumbImageUrl : (typeof data.profilImageUrl != "undefined" ? data.profilImageUrl : null),
16					});
17				} else if(pageProfil.params.view == "directory" && pageProfil.params.dir == "members"){
18					
19					let datas = {};
20					let _id = data._id.$id;
21
22					datas[_id] = data;
23
24					let community = directorySocket.events.communityVariable(data, _id);
25
26					let str = directory.showResultsDirectoryHtml(datas, "", "", community);
27
28					let targetDiv = document.querySelector(`.msr-id-${_id}`);
29					if (targetDiv) {
30						targetDiv.parentElement.remove();
31					} else {
32						directorySocket.events.updateNomberElements(datas, "add");
33					}
34					filterGroup.results.$grid.prepend(str);
35					filterGroup.results.$grid.masonry('destroy');
36					filterGroup.results.$grid.masonry({itemSelector: '.smartgrid-slide-element', 'columnWidth': '.searchEntityContainer.smartgrid-slide-element'});
37
38					targetDiv = document.querySelector(`.msr-id-${_id}`);
39					let image = targetDiv.querySelectorAll('img.lzy_img');
40					image.forEach((v) => {
41						v.dom = "#content-results-profil";
42						imageObserver.observe(v);
43					});
44					directory.bindEventAdmin();
45					if(filterGroup.results.map.active){
46						filterGroup.mapObj.addElts(datas);
47					}
48
49				} else {
50					filterGroup.search.init(filterGroup);
51				}
52
53				if(typeof window[`kanbanDom${contextData.id}`] != "undefined"){
54					let newRole = {
55						_id : data._id.$id,
56						id : data._id.$id,
57						title : "<b>"+data.name+"</b>",
58						header : "memberof",
59						canEditHeader: false,
60						html : true,
61						collection : data.collection,
62						slug : data.slug,
63						actions : [
64							{
65								'icon': 'fa fa-trash' ,
66								'bstooltip' : {
67									'text' : 'Supprimer le membre de la communauter', 
68									'position' : 'left'
69								}, 
70								'action': 'onRemoveMember'
71							}
72						]
73					}
74					window[`kanbanDom${contextData.id}`].kanban('addData', newRole);
75				}
76            }).on("remove_user", function(data){
77				let _id = data._id.$id;
78				if(pageProfil.params.view == "conode"){
79					window[`communityGraph${contextData.id}`].removeChild(data.collection, _id);
80				}else {
81					let targetDiv = document.querySelector(`.msr-id-${_id}`);
82				
83					if (targetDiv) {
84						targetDiv.parentElement.remove();
85						filterGroup.results.$grid.masonry('destroy');
86						filterGroup.results.$grid.masonry({itemSelector: '.smartgrid-slide-element', 'columnWidth': '.searchEntityContainer.smartgrid-slide-element'});
87
88						directorySocket.events.updateNomberElements(data, "remove");
89					}
90					if(filterGroup.results.map.active && typeof filterGroup.mapObj.removeElts != "undefined"){
91						filterGroup.mapObj.removeElts(_id);
92					}
93				}
94				if(typeof window[`kanbanDom${contextData.id}`] != "undefined"){
95					var indexToDelete = window[`kanbanDom${contextData.id}`].find(`[data-column="memberof"] .kanban-list-card-detail`).index($(`div.kanban-list-card-detail[data-id=${_id}]`));
96					window[`kanbanDom${contextData.id}`].kanban('deleteData', { column: "memberof", id:_id,  index: indexToDelete });
97				}
98            }).on("invite_user", function(data){
99				let show = false;
100				if(data.invitedId == userId) {
101					directorySocket.events.invitedMe();
102				}
103
104				if(
105					typeof userConnected.roles != "undefined" && typeof userConnected.roles.superAdmin != "undefined" && userConnected.roles.superAdmin
106				){
107					show = true;
108				}else if(contextData.type == "organizations"){
109					if(typeof userConnected.links.memberOf[contextData.id] != "undefined"
110						&& typeof userConnected.links.memberOf[contextData.id].isAdmin != "undefined"
111						&& userConnected.links.memberOf[contextData.id].isAdmin
112						&& (typeof userConnected.links.memberOf[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.memberOf[contextData.id].isInviting == "undefined")
113					){
114						show = true;
115					}
116				}else if(contextData.type == "projects"){
117					if(typeof userConnected.links.projects[contextData.id] != "undefined"
118						&& typeof userConnected.links.projects[contextData.id].isAdmin != "undefined"
119						&& userConnected.links.projects[contextData.id].isAdmin
120						&& (typeof userConnected.links.projects[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.projects[contextData.id].isInviting == "undefined")
121					){
122						show = true;
123					}
124				}else if(contextData.type == "organizations"){
125					if(typeof userConnected.links.memberOf[contextData.id] != "undefined"
126						&& typeof userConnected.links.memberOf[contextData.id].isAdmin != "undefined"
127						&& userConnected.links.memberOf[contextData.id].isAdmin
128						&& (typeof userConnected.links.memberOf[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.memberOf[contextData.id].isInviting == "undefined")
129					){
130						show = true;
131					}
132				}
133                if(typeof data.donne != "undefined" && data.donne != null && show){
134					
135					let donne = data.donne;
136					let datas = {};
137					datas[data.invitedId] = donne;
138
139					let community = directorySocket.events.communityVariable(donne, data.invitedId);
140					let str = directory.showResultsDirectoryHtml(datas, "", "", community);
141					var targetDiv = document.querySelector(`.msr-id-${data.invitedId}`);
142					if (targetDiv) {
143						targetDiv.parentElement.remove();
144					} else {
145						directorySocket.events.updateNomberElements(datas, "add");
146					}
147
148					filterGroup.results.$grid.prepend(str);
149					filterGroup.results.$grid.masonry('destroy');
150					filterGroup.results.$grid.masonry({itemSelector: '.smartgrid-slide-element', 'columnWidth': '.searchEntityContainer.smartgrid-slide-element'});
151
152					targetDiv = document.querySelector(`.msr-id-${data.invitedId}`);
153					var newSpan = document.createElement('span');
154					newSpan.className = 'entityStatusLink italic';
155					newSpan.textContent = 'Invitation envoyée';
156
157					let slideHover = targetDiv.querySelector('.slide-hover');
158					var textWrap = slideHover.querySelector('.text-wrap');
159					var adminToolBar = slideHover.querySelector('.adminToolBarDirectory');
160
161					let image = targetDiv.querySelectorAll('img.lzy_img');
162					image.forEach((v) => {
163						v.dom = "#content-results-profil";
164						imageObserver.observe(v);
165					});
166
167					directory.bindEventAdmin();
168					textWrap.insertBefore(newSpan, adminToolBar);
169                }
170            }).on('add_members', function(data){
171				if(typeof window[`kanbanDom${contextData.id}`] != "undefined" && window[`kanbanDom${contextData.id}`]){
172					window[`load${contextData.id}`] = false;
173					if($(`div#kanban-wrapper-${data.column.id}`).length == 0){
174						var copyColumn = $.extend({}, data.column);
175						copyColumn.editable = false;
176						copyColumn.menus = [];
177						mylog.log("Column to add", copyColumn);
178						window[`kanbanDom${contextData.id}`].kanban('addColumn', {dom: $(".js-add-column").prev(".kanban-list-wrapper"), column: copyColumn});
179						let newRole = {
180							_id : copyColumn.id,
181							id : copyColumn.id,
182							instanceIdentity : copyColumn.id,
183							title : "<i>"+copyColumn.label+"</i>",
184							name : copyColumn.label,
185							header : "listRole",
186							canEditHeader: false,
187							html : true,
188							canMoveCard: false,
189							actions : [
190								{icon: 'fa fa-trash', action: 'onRemoveRole'},
191								{icon: 'fa fa-user',badge: copyColumn.count, action: '' }
192							]
193						}
194						window[`kanbanDom${contextData.id}`].kanban('addData', newRole);
195					}
196					var copy = $.extend({}, data.data);
197					copy.canMoveCard = false;
198					copy.actions = [
199						{ icon: 'fa fa-trash', action: 'onDelete'}
200					];
201					if(typeof contextData.links != "undefined" && 
202						typeof contextData.links[data.connectType] != "undefined" &&
203						typeof contextData.links[data.connectType][copy.instanceIdentity] != "undefined" &&
204						typeof contextData.links[data.connectType][copy.instanceIdentity].roles != "undefined"){
205							mylog.log("Roles to push", contextData.links[data.connectType][copy.instanceIdentity].roles)
206							contextData.links[data.connectType][copy.instanceIdentity].roles.push(data.column.label);
207						}
208						else
209							contextData.links[data.connectType][copy.instanceIdentity]={"roles": [data.column.label]};
210					if(typeof window[`dataMember${contextData.id}`] != "undefined" &&
211						typeof window[`dataMember${contextData.id}`][copy.instanceIdentity] != "undefined" &&
212						typeof window[`dataMember${contextData.id}`][copy.instanceIdentity].links != "undefined" &&
213						typeof window[`dataMember${contextData.id}`][copy.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType] != "undefined" &&
214						typeof window[`dataMember${contextData.id}`][copy.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id] != "undefined" &&
215						typeof window[`dataMember${contextData.id}`][copy.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles != "undefined"){
216							window[`dataMember${contextData.id}`][copy.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.push(data.column.label);
217						}else{
218							window[`dataMember${contextData.id}`][copy.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles = [data.column.label];
219						}
220					window[`kanbanDom${contextData.id}`].kanban('addData', copy);
221					let htm = `${data.column.count} <span class="fa fa-user"> </span>`;
222					$('div[data-id='+data.column.id+'] .kanban-footer-card .nbpers').html(htm);
223					if(!$(`div#kanban-wrapper-${data.column.id}`).is(":visible")){
224						$(`div[data-id=${data.column.id}]`).click();
225					}
226					pageProfil.views.directory();
227				}
228			}).on("remove_members", function(data){
229				window[`load${contextData.id}`] = false;
230				let htm = `${data.column.count} <span class="fa fa-user"> </span>`;
231				$('div[data-id='+data.column.id+'] .kanban-footer-card .nbpers').html(htm);
232				if(!$(`div#kanban-wrapper-${data.column.id}`).is(":visible")){
233					$(`div[data-id=${data.column.id}]`).click();
234				}
235				if(data.column.count == 0) {
236					$('div[data-id = '+data.column.id+']').addClass('hidden')
237					$('#kanban-wrapper-'+data.column.id).addClass('hidden')
238				}
239				if(typeof contextData.links != "undefined" && 
240					typeof contextData.links[data.connectType] != "undefined" &&
241					typeof contextData.links[data.connectType][data.data.instanceIdentity] != "undefined" &&
242					typeof contextData.links[data.connectType][data.data.instanceIdentity].roles != "undefined"){
243						contextData.links[data.connectType][data.data.instanceIdentity].roles.splice(contextData.links[data.connectType][data.data.instanceIdentity].roles.indexOf(data.column.label), 1);
244					}
245				if(typeof window[`dataMember${contextData.id}`] != "undefined" &&
246					typeof window[`dataMember${contextData.id}`][data.data.instanceIdentity] != "undefined" &&
247					typeof window[`dataMember${contextData.id}`][data.data.instanceIdentity].links != "undefined" &&
248					typeof window[`dataMember${contextData.id}`][data.data.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType] != "undefined" &&
249					typeof window[`dataMember${contextData.id}`][data.data.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id] != "undefined" &&
250					typeof window[`dataMember${contextData.id}`][data.data.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles != "undefined"){
251						let indice = window[`dataMember${contextData.id}`][data.data.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.indexOf(data.column.label);
252						if(indice != -1){
253							window[`dataMember${contextData.id}`][data.data.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.splice(indice, 1);
254						}
255						// window[`dataMember${contextData.id}`][data.data.instanceIdentity].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.push(data.column.label);
256					}
257				var indexToDelete = window[`kanbanDom${contextData.id}`].find(`[data-column=${data.column.id}] .kanban-list-card-detail`).index($(`div.kanban-list-card-detail[data-id=${data.data.id}${data.column.id}]`));
258				window[`kanbanDom${contextData.id}`].kanban('deleteData', { column: data.column.id, id:data.data.id,  index: indexToDelete });
259				pageProfil.views.directory();
260			}).on("remove_role", function(data){
261				
262				if(contextData.type == "organizations"){
263					if(typeof window[`dataMember${contextData.id}`] != "undefined"){
264						$.map(window[`dataMember${contextData.id}`], function(value, key) {
265							if(typeof value.links != "undefined" && typeof value.links.memberOf != "undefined"){
266								$.map(value.links.memberOf, function(members, keyMembers) {
267									if(keyMembers == contextData.id && typeof members.roles != "undefined" && typeof members.roles == 'object' && Array.isArray(members.roles)){
268										let indice = members.roles.indexOf(data.column.name);
269										if(indice != -1){
270											members.roles.splice(indice, 1);
271											if(typeof contextData.links != "undefined" && 
272											typeof contextData.links[data.connectType] != "undefined" &&
273											typeof contextData.links[data.connectType][key] != "undefined" &&
274											typeof contextData.links[data.connectType][key].roles != "undefined"){
275												contextData.links[data.connectType][key].roles.splice(contextData.links[data.connectType][key].roles.indexOf(data.column.name), 1);
276											}
277										}
278										if(typeof window[`dataMember${contextData.id}`] != "undefined" &&
279											typeof window[`dataMember${contextData.id}`][key] != "undefined" &&
280											typeof window[`dataMember${contextData.id}`][key].links != "undefined" &&
281											typeof window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType] != "undefined" &&
282											typeof window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id] != "undefined" &&
283											typeof window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles != "undefined"){
284												let indiceDataMember = window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.indexOf(data.column.name);
285												if(indiceDataMember != -1){
286													window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.splice(indice, 1);
287												}
288												// window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.push(data.column.label);
289											}
290									}
291								})
292							}
293						})
294					}
295				}else if(contextData.type == "projects"){
296					if(typeof window[`dataMember${contextData.id}`] != "undefined"){
297						$.map(window[`dataMember${contextData.id}`], function(value, key) {
298							if(typeof value.links != "undefined" && typeof value.links.projects != "undefined"){
299								$.map(value.links.projects, function(members, keyMembers) {
300									if(keyMembers == contextData.id && typeof members.roles != "undefined" && typeof members.roles == 'object' && Array.isArray(members.roles)){
301										let indice = members.roles.indexOf(data.column.name);
302										if(indice != -1){
303											members.roles.splice(indice, 1);
304											if(typeof contextData.links != "undefined" && 
305											typeof contextData.links[data.connectType] != "undefined" &&
306											typeof contextData.links[data.connectType][key] != "undefined" &&
307											typeof contextData.links[data.connectType][key].roles != "undefined"){
308												contextData.links[data.connectType][key].roles.splice(contextData.links[data.connectType][key].roles.indexOf(data.column.name), 1);
309											}
310										}
311										if(typeof window[`dataMember${contextData.id}`] != "undefined" &&
312											typeof window[`dataMember${contextData.id}`][key] != "undefined" &&
313											typeof window[`dataMember${contextData.id}`][key].links != "undefined" &&
314											typeof window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType] != "undefined" &&
315											typeof window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id] != "undefined" &&
316											typeof window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles != "undefined"){
317												let indiceDataMember = window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.indexOf(data.column.name);
318												if(indiceDataMember != -1){
319													window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.splice(indice, 1);
320												}
321												// window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.push(data.column.label);
322											}
323									}
324								})
325							}
326						})
327					}
328				}else if(contextData.type == "events"){
329					if(typeof window[`dataMember${contextData.id}`] != "undefined"){
330						$.map(window[`dataMember${contextData.id}`], function(value, key) {
331							if(typeof value.links != "undefined" && typeof value.links.events != "undefined"){
332								$.map(value.links.events, function(members, keyMembers) {
333									if(keyMembers == contextData.id && typeof members.roles != "undefined" && typeof members.roles == 'object' && Array.isArray(members.roles)){
334										let indice = members.roles.indexOf(data.column.name);
335										if(indice != -1){
336											members.roles.splice(indice, 1);
337											if(typeof contextData.links != "undefined" && 
338											typeof contextData.links[data.connectType] != "undefined" &&
339											typeof contextData.links[data.connectType][key] != "undefined" &&
340											typeof contextData.links[data.connectType][key].roles != "undefined"){
341												contextData.links[data.connectType][key].roles.splice(contextData.links[data.connectType][key].roles.indexOf(data.column.name), 1);
342											}
343										}
344										if(typeof window[`dataMember${contextData.id}`] != "undefined" &&
345											typeof window[`dataMember${contextData.id}`][key] != "undefined" &&
346											typeof window[`dataMember${contextData.id}`][key].links != "undefined" &&
347											typeof window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType] != "undefined" &&
348											typeof window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id] != "undefined" &&
349											typeof window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles != "undefined"){
350												let indiceDataMember = window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.indexOf(data.column.name);
351												if(indiceDataMember != -1){
352													window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.splice(indice, 1);
353												}
354												// window[`dataMember${contextData.id}`][key].links[data.connectType == "members" ? "memberOf" : data.connectType][contextData.id].roles.push(data.column.label);
355											}
356									}
357								})
358							}
359						})
360					}
361				}
362				var indexToDelete = window[`kanbanDom${contextData.id}`].find(`[data-column=${data.column.header}] .kanban-list-card-detail`).index($(`div.kanban-list-card-detail[data-id=${data.column.id}]`));
363				window[`kanbanDom${contextData.id}`].kanban('deleteData', { column: data.column.header, id:data.column.id,  index: indexToDelete });
364				$('#kanban-wrapper-'+data.column.id).addClass('hidden')
365				$('#kanban-wrapper-'+data.column.id).removeClass('visible')
366                                        
367				pageProfil.views.directory();
368			}).on("add_role", function(data){
369				let connectType = contextData.type == "organizations" ? "memberOf" : (contextData.type == "projects" ? "projects" : "events");
370				if(typeof window[`kanbanDom${contextData.id}`] != "undefined"){
371					data.newRoles.forEach(element => {
372						let roles = $('div[data-column="listRole"] .kanban-list-card-title');
373
374						let exists = roles.filter(function() {
375							return $(this).text().trim() == element;
376						});
377						let columnId = "Column"+Date.now();
378						if(exists.length == 0){
379							var copyColumn = $.extend({}, {
380								"id" : columnId,
381								"label": element,
382							});
383							copyColumn.editable = false;
384							copyColumn.menus = [];
385							window[`kanbanDom${contextData.id}`].kanban('addColumn', {dom: $(".js-add-column").prev(".kanban-list-wrapper"), column: copyColumn});
386							let newRole = {
387								_id : columnId,
388								id : columnId,
389								instanceIdentity : columnId,
390								title : "<b>"+element+"</b>",
391								name : element,
392								header : "listRole",
393								canEditHeader: false,
394								html : true,
395								canMoveCard: false,
396								actions : [
397									{icon: 'fa fa-trash', action: 'onRemoveRole'},
398									{icon: 'fa fa-user',badge: 1, action: '' }
399								]
400							}
401							window[`kanbanDom${contextData.id}`].kanban('addData', newRole);
402						}else{
403							columnId = exists.closest('.kanban-list-card-detail').attr('data-id');
404							let nb = parseInt($('div[data-id='+columnId+'] .kanban-footer-card .nbpers').text()) + 1;
405							let htm = `${nb} <span class="fa fa-user"> </span>`;
406							$('div[data-id='+columnId+'] .kanban-footer-card .nbpers').html(htm);
407						}
408						if(typeof contextData.links != "undefined" && 
409							typeof contextData.links[connectType] != "undefined" &&
410							typeof contextData.links[connectType][data.memberid] != "undefined" &&
411							typeof contextData.links[connectType][data.memberid].roles != "undefined"){
412								if(contextData.links[connectType][data.memberid].roles.indexOf(element) == -1)
413									contextData.links[connectType][data.memberid].roles.push(element);
414							}
415							else
416								contextData.links[connectType][data.memberid]={"roles": [element]};
417						
418						if($(`.kanban-list-wrapper.roles-list[data-column="${columnId}"]`).find(`.kanban-list-card-detail[data-id='${data.memberid}${columnId}']`).length == 0){
419							let mb = {
420								_id : data.memberid,
421								id : data.memberid,
422								instanceIdentity : data.memberid,
423								title : '<b>'+window[`dataMember${contextData.id}`][data.memberid].name+'</b>',
424								name : window[`dataMember${contextData.id}`][data.memberid].name,
425								header : columnId,
426								collection : window[`dataMember${contextData.id}`][data.memberid].collection,
427								html : true,
428								canMoveCard: false,
429								actions : [
430									{
431										'icon': 'fa fa-trash', 
432										'bstooltip' : { 
433											'text' : 'Enlever cette role du membre',
434											'position' : 'left'
435										}, 
436										'action': 'onDelete'
437									}
438								]
439							}
440							window[`kanbanDom${contextData.id}`].kanban('addData', mb);
441						}
442						
443						if(typeof data.oldRoles != "undefined" && $.inArray(element, data.oldRoles) >= 1)
444							data.oldRoles.splice(data.oldRoles.indexOf(element) , 1);
445						
446					});
447					if(typeof data.oldRoles != "undefined"){
448						Object.values(data.oldRoles).forEach(element => {
449
450							if(typeof contextData.links != "undefined" && 
451							typeof contextData.links[connectType] != "undefined" &&
452							typeof contextData.links[connectType][data.memberid] != "undefined" &&
453							typeof contextData.links[connectType][data.memberid].roles != "undefined"){
454								let indice = contextData.links[connectType][data.memberid].roles.indexOf(element);
455								if(indice != -1){
456									contextData.links[connectType][data.memberid].roles.splice(indice, 1);
457								}
458							}
459							if(typeof window[`dataMember${contextData.id}`] != "undefined" &&
460								typeof window[`dataMember${contextData.id}`][data.memberid] != "undefined" &&
461								typeof window[`dataMember${contextData.id}`][data.memberid].links != "undefined" &&
462								typeof window[`dataMember${contextData.id}`][data.memberid].links[connectType] != "undefined" &&
463								typeof window[`dataMember${contextData.id}`][data.memberid].links[connectType][contextData.id] != "undefined" &&
464								typeof window[`dataMember${contextData.id}`][data.memberid].links[connectType][contextData.id].roles != "undefined"){
465									let indiceDataMember = window[`dataMember${contextData.id}`][data.memberid].links[connectType][contextData.id].roles.indexOf(element);
466									if(indiceDataMember != -1){
467										window[`dataMember${contextData.id}`][data.memberid].links[connectType][contextData.id].roles.splice(indiceDataMember, 1);
468									}
469									// window[`dataMember${contextData.id}`][data.memberid].links[connectType][contextData.id].roles.push(data.column.label);
470								}
471							let roles = $('div[data-column="listRole"] .kanban-list-card-title');
472							let exists = roles.filter(function() {
473								return $(this).text().trim() == element;
474							});
475							let columnId = exists.closest('.kanban-list-card-detail').attr('data-id');
476							let nb = parseInt($('div[data-id='+columnId+'] .kanban-footer-card .nbpers').text()) - 1;
477							let htm = `${nb} <span class="fa fa-user"> </span>`;
478							$('div[data-id='+columnId+'] .kanban-footer-card .nbpers').html(htm);
479							var indexToDelete = window[`kanbanDom${contextData.id}`].find(`[data-column=${columnId}] .kanban-list-card-detail`).index($(`div.kanban-list-card-detail[data-id=${data.memberid+columnId}]`));
480							window[`kanbanDom${contextData.id}`].kanban('deleteData', { column: columnId, id:data.memberid+columnId,  index: indexToDelete });
481				
482							if(nb == 0){
483								$('div[data-id = '+columnId+']').addClass('hidden')
484								$('#kanban-wrapper-'+columnId).addClass('hidden')
485							}
486						});
487					}
488				}
489			});
490        }
491    },
492    emitEvent: function(wsCO, nameEvent, data) {
493        if (coWsConfig.enable) {
494			wsCO.emit("directory_event", {
495				name: nameEvent,
496				id: contextData.id,
497				data: data
498			})
499		}
500    },
501    events: {
502        invitedMe: function(){
503			var containInvitation = "";
504			var copyContextData = JSON.parse(JSON.stringify(contextData));
505			copyContextData.id = contextData._id.$id;
506			if(typeof copyContextData.costum != "undefined")
507				delete copyContextData.costum;
508			if(typeof copyContextData.oceco != "undefined")
509				delete copyContextData.oceco;
510			if(typeof copyContextData.contacts != "undefined")
511				delete copyContextData.contacts;
512			if(typeof copyContextData.links != "undefined")
513				delete copyContextData.links;
514			containInvitation += `<div id="containInvitation" class="animated bounceInRight "></div>`;
515			var param = {
516				element : copyContextData
517			}
518            // $("#social-header").append(containInvitation);
519			ajaxPost(
520				null,
521				baseUrl + '/co2/element/getinvitedme',
522				param,
523				function(data){ 
524					$("#social-header .animated.bounceInRight").html(data);
525				}
526			);
527        },
528		communityVariable: function(data, _id) {
529			
530			let community = {
531				connectType : "members",
532				links : {
533					"members" : {}
534				}
535			};
536			
537			if(
538				typeof userConnected.roles != "undefined" && typeof userConnected.roles.superAdmin != "undefined" && userConnected.roles.superAdmin
539			){
540				community.edit = true;
541			}else if(contextData.type == "organizations"){
542				if(typeof userConnected.links.memberOf[contextData.id] != "undefined"
543					&& typeof userConnected.links.memberOf[contextData.id].isAdmin != "undefined"
544					&& userConnected.links.memberOf[contextData.id].isAdmin
545					&& (typeof userConnected.links.memberOf[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.memberOf[contextData.id].isInviting == "undefined")
546				){
547					community.edit = true;
548				}
549			}else if(contextData.type == "projects"){
550				if(typeof userConnected.links.projects[contextData.id] != "undefined"
551					&& typeof userConnected.links.projects[contextData.id].isAdmin != "undefined"
552					&& userConnected.links.projects[contextData.id].isAdmin
553					&& (typeof userConnected.links.projects[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.projects[contextData.id].isInviting == "undefined")
554				){
555					community.edit = true;
556				}
557			}else if(contextData.type == "events"){
558				if(typeof userConnected.links.events[contextData.id] != "undefined"
559					&& typeof userConnected.links.events[contextData.id].isAdmin != "undefined"
560					&& userConnected.links.events[contextData.id].isAdmin
561					&& (typeof userConnected.links.events[contextData.id].isAdminPending == "undefined" || typeof userConnected.links.events[contextData.id].isInviting == "undefined")
562				){
563					community.edit = true;
564				}
565			}
566			
567
568			community.links["members"][_id] = {
569				type: data.collection,
570				date : data.modified
571			}
572
573			return community;
574		},
575		updateNomberElements: function(datas, type) {
576            if(contextData.type == "organizations" || contextData.type == "projects"){
577			const aElement = $(`a[data-type-dir="${contextData.type == "organizations" ? "members" : "contributors"}"]`);
578			let badgeElement = aElement.find('.badge');
579			if (badgeElement.length) {
580				const badge_content = parseInt(badgeElement.text());
581				const tmp = type === "add" ? Object.keys(datas).length + badge_content : badge_content - 1;
582				badgeElement.text(tmp);
583			}
584            }
585			const spanElement = $('.count-nbr');
586			if (spanElement.length) {
587				const span_content = parseInt(spanElement.text());
588				const tmp =  type === "add" ? Object.keys(datas).length + span_content : span_content - 1;
589				spanElement.text(tmp);
590			}
591
592		}
593    }
594};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.