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 {
 | 
			
		||||
    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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#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::after {
 | 
			
		||||
	display: none;
 | 
			
		||||
 
 | 
			
		||||
@@ -13,13 +13,75 @@ ComunicWeb.components.textParser = {
 | 
			
		||||
	 */
 | 
			
		||||
	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
 | 
			
		||||
		ComunicWeb.components.emoji.parser.parse({
 | 
			
		||||
			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