mirror of
				https://github.com/pierre42100/ComunicWeb
				synced 2025-11-03 19:54:14 +00:00 
			
		
		
		
	Added users tag support
This commit is contained in:
		@@ -10,3 +10,17 @@
 | 
				
			|||||||
a {
 | 
					a {
 | 
				
			||||||
    cursor: pointer;
 | 
					    cursor: pointer;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * <a> like elements
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					.a {
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    outline: none;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					    color: #3c8dbc;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.a:focus, .a:hover {
 | 
				
			||||||
 | 
					    color: #72afd2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -100,6 +100,10 @@
 | 
				
			|||||||
	height: 1em;
 | 
						height: 1em;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#conversationsElem .direct-chat-text a, #conversationsElem .direct-chat-text .a {
 | 
				
			||||||
 | 
						color: inherit;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#conversationsElem .direct-chat-text.not-first-message::before, 
 | 
					#conversationsElem .direct-chat-text.not-first-message::before, 
 | 
				
			||||||
#conversationsElem .direct-chat-text.not-first-message::after {
 | 
					#conversationsElem .direct-chat-text.not-first-message::after {
 | 
				
			||||||
	display: none;
 | 
						display: none;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,13 +13,75 @@ ComunicWeb.components.textParser = {
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	parse: function(info){
 | 
						parse: function(info){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//Add space at the begining and the end of the content to ensure
 | 
				
			||||||
 | 
							//parsing will not encounter errors
 | 
				
			||||||
 | 
							info.element.innerHTML = " " + info.element.innerHTML + " ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//Prepare users tag parsing
 | 
				
			||||||
 | 
							this._prepare_user_tag_parsing(info.element);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//Parse emojies
 | 
							//Parse emojies
 | 
				
			||||||
		ComunicWeb.components.emoji.parser.parse({
 | 
							ComunicWeb.components.emoji.parser.parse({
 | 
				
			||||||
			element: info.element
 | 
								element: info.element
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
							//Parse users tags
 | 
				
			||||||
 | 
							this._parse_users_tag(info.element);
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Prepare users tag parsing
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {HTMLElement} target The target element to prepare
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						_prepare_user_tag_parsing: function(target){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//Find all occurences of users tag
 | 
				
			||||||
 | 
							while(target.innerHTML.match(/@[a-zA-Z0-9.]+/i)){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								//Get user tag
 | 
				
			||||||
 | 
								var userTag = target.innerHTML.match(/@[a-zA-Z0-9.]+/i)[0];
 | 
				
			||||||
 | 
								var userID = userTag.replace("@", "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								target.innerHTML = target.innerHTML.replace(userTag, "<userTag>"+userID+"</userTag>");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Parse users tag
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {HTMLElement} target The target element where user tags has
 | 
				
			||||||
 | 
						 * to be parsed
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						_parse_users_tag: function(target){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//Get the list of user tags of the target
 | 
				
			||||||
 | 
							var nodes = target.getElementsByTagName("userTag");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (const num in nodes) {
 | 
				
			||||||
 | 
								if (nodes.hasOwnProperty(num)) {
 | 
				
			||||||
 | 
									const node = nodes[num];
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									//Get target user ID
 | 
				
			||||||
 | 
									const userID = node.innerHTML;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									//Adapt node content
 | 
				
			||||||
 | 
									node.innerHTML = "@" + userID;
 | 
				
			||||||
 | 
									node.className = "a";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									//Set event listener
 | 
				
			||||||
 | 
									node.addEventListener("click", function(ev){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										//Open user page
 | 
				
			||||||
 | 
										openUserPage(userID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									});
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user